Module: Eturem::NameErrorExt

Includes:
ExceptionExt
Defined in:
lib/eturem/base.rb,
lib/eturem/ja/name_error.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods included from ExceptionExt

#eturem_location_to_s, #eturem_traceback

Methods included from Base

after_line_num=, before_line_num=, #eturem_backtrace, #eturem_backtrace_locations, #eturem_backtrace_str, #eturem_full_message, #eturem_location_to_s, #eturem_original_error_message, #eturem_script, highlight, output_backtrace=, output_original=, output_script=, read_script, script, unhighlight, use_coderay=, warning_message

Class Method Details

.correctionsObject



272
# File 'lib/eturem/base.rb', line 272

def self.corrections; @eturem_corrections; end

Instance Method Details

#eturem_basic_name_errorObject



38
39
40
41
42
43
44
45
46
47
48
# File 'lib/eturem/ja/name_error.rb', line 38

def eturem_basic_name_error
  @eturem_message_ja =
    (self.is_a?(NoMethodError) ? "メソッド" : "変数/メソッド") +
    "「\e[1;4;31m#{self.name.to_s.encode("utf-8")}\e[0m」は存在しません。"
  unless @eturem_corrections.empty?
    did_you_mean = @eturem_corrections.map{ |d|
      "\e[1;33m#{d.to_s.encode("utf-8")}\e[0m"
    }.join(" / ")
    @eturem_message_ja += "「#{did_you_mean}」の入力ミスではありませんか?"
  end
end

#eturem_messageObject



5
6
7
8
9
10
11
12
13
14
15
16
# File 'lib/eturem/ja/name_error.rb', line 5

def eturem_message()
  if self.name.to_s.encode("utf-8").include?(" ")
    eturem_multibyte_space
  elsif self.name.to_s.encode("utf-8").match(/[”’`(){}#]/)
    eturem_multibyte_char
  elsif self.receiver == nil
    eturem_receiver_is_nil
  else
    eturem_basic_name_error
  end
  super
end

#eturem_multibyte_charObject



24
25
26
27
28
29
30
# File 'lib/eturem/ja/name_error.rb', line 24

def eturem_multibyte_char
  @eturem_script_lines = Eturem::Base.read_script(@eturem_path)
  if @eturem_script_lines[@eturem_lineno]
    @eturem_script_lines[@eturem_lineno].gsub!(/[”’`()#]+/){ "\e[1;4;31m#{$&}\e[0m" }
  end
  @eturem_message_ja = "スクリプト中に全角記号が混じっています。"
end

#eturem_multibyte_spaceObject



18
19
20
21
22
# File 'lib/eturem/ja/name_error.rb', line 18

def eturem_multibyte_space
  @eturem_script_lines = Eturem::Base.read_script(@eturem_path)
  Eturem::Base.highlight(@eturem_script_lines[@eturem_lineno], / +/, "\e[1;4;31m")
  @eturem_message_ja = "スクリプト中に全角空白が混じっています。"
end

#eturem_prepareObject



266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
# File 'lib/eturem/base.rb', line 266

def eturem_prepare()
  @eturem_corrections = self.respond_to?(:corrections) ? self.corrections : []
  @eturem_corrections += Object.constants.map(&:to_s).select do |const|
    const.casecmp?(self.name)
  end
  @eturem_corrections.uniq!
  def self.corrections; @eturem_corrections; end
  super
  uname = self.name.to_s.encode("utf-8")
  if @eturem_script_lines[@eturem_lineno]
    Eturem::Base.highlight(@eturem_script_lines[@eturem_lineno], uname, "\e[1;4;31m")
  end
  @eturem_corrections.each do |name|
    index = @eturem_script_lines.index { |line| line.include?(name.to_s.encode("utf-8")) }
    next unless index
    Eturem::Base.highlight(@eturem_script_lines[index], name.to_s.encode("utf-8"), "\e[1;33m")
    @eturem_output_linenos.push(index)
  end
end

#eturem_receiver_is_nilObject



32
33
34
35
36
# File 'lib/eturem/ja/name_error.rb', line 32

def eturem_receiver_is_nil
  @eturem_message_ja =
  "nil に対して #{self.name.to_s.encode("utf-8")} というメソッドを呼び出そうとしています。\n" +
  "変数の値/メソッドの返値が予期せず nil になっている可能性があります。"
end