eturem 0.3.2 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/Gemfile +3 -2
- data/LICENSE.txt +1 -1
- data/README.ja.md +92 -3
- data/README.md +4 -0
- data/Rakefile +1 -0
- data/eturem.gemspec +11 -17
- data/exe/eturem +15 -0
- data/lib/eturem.rb +61 -21
- data/lib/eturem/base.rb +260 -228
- data/lib/eturem/en.rb +1 -215
- data/lib/eturem/en/main.rb +213 -0
- data/lib/eturem/en/warning.rb +11 -0
- data/lib/eturem/ja.rb +1 -345
- data/lib/eturem/ja/argument_error.rb +56 -0
- data/lib/eturem/ja/dxruby_error.rb +13 -0
- data/lib/eturem/ja/error_enoent.rb +19 -0
- data/lib/eturem/ja/interrupt.rb +12 -0
- data/lib/eturem/ja/load_error.rb +14 -0
- data/lib/eturem/ja/main.rb +220 -0
- data/lib/eturem/ja/name_error.rb +50 -0
- data/lib/eturem/ja/no_memory_error.rb +12 -0
- data/lib/eturem/ja/syntax_error.rb +88 -0
- data/lib/eturem/ja/system_stack_error.rb +10 -0
- data/lib/eturem/ja/type_error.rb +13 -0
- data/lib/eturem/ja/uncaught_throw_error.rb +11 -0
- data/lib/eturem/ja/warning.rb +42 -0
- data/lib/eturem/ja/zero_division_error.rb +10 -0
- data/lib/eturem/version.rb +1 -1
- data/lib/eturem/warning.rb +13 -0
- metadata +28 -50
@@ -0,0 +1,56 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
module Eturem
|
4
|
+
module ArgumentErrorExt
|
5
|
+
include ExceptionExt
|
6
|
+
|
7
|
+
def eturem_message()
|
8
|
+
given = nil
|
9
|
+
if @eturem_message.include?("wrong number of arguments")
|
10
|
+
if @eturem_message.match(/\(given (?<given>\d+), expected (?<expected>[^)]+)\)/)
|
11
|
+
given = Regexp.last_match(:given).to_i
|
12
|
+
expected = Regexp.last_match(:expected)
|
13
|
+
elsif @eturem_message.match(/\((?<given>\d+) for (?<expected>[^)]+)\)/)
|
14
|
+
given = Regexp.last_match(:given).to_i
|
15
|
+
expected = Regexp.last_match(:expected)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
if given
|
20
|
+
eturem_wrong_number_of_arguments(given, expected)
|
21
|
+
elsif @eturem_message.match(/too big/)
|
22
|
+
eturem_argument_too_big
|
23
|
+
else
|
24
|
+
eturem_other_argument_error
|
25
|
+
end
|
26
|
+
super
|
27
|
+
end
|
28
|
+
|
29
|
+
def eturem_wrong_number_of_arguments(given, expected)
|
30
|
+
@eturem_message_ja = "引数の数が正しくありません。「#{@eturem_method}」は本来"
|
31
|
+
case expected
|
32
|
+
when "0"
|
33
|
+
@eturem_message_ja += "引数が不要です"
|
34
|
+
when /^(\d+)\.\.(\d+)$/
|
35
|
+
@eturem_message_ja += " #{$1}~#{$2} 個の引数を取ります"
|
36
|
+
when /^(\d+)\+$/
|
37
|
+
@eturem_message_ja += " #{$1} 個以上の引数を取ります"
|
38
|
+
else
|
39
|
+
@eturem_message_ja += " #{expected} 個の引数を取ります"
|
40
|
+
end
|
41
|
+
if given == 0
|
42
|
+
@eturem_message_ja += "が、引数が1つも渡されていません。"
|
43
|
+
else
|
44
|
+
@eturem_message_ja += "が、#{given} 個の引数が渡されています。"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def eturem_argument_too_big()
|
49
|
+
@eturem_message_ja = "「#{@eturem_method}」への引数が大きすぎます。"
|
50
|
+
end
|
51
|
+
|
52
|
+
def eturem_other_argument_error()
|
53
|
+
@eturem_message_ja = "「#{@eturem_method}」への引数が正しくありません。"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
module Eturem
|
4
|
+
module Errno_ENOENTExt
|
5
|
+
include ExceptionExt
|
6
|
+
|
7
|
+
def eturem_message()
|
8
|
+
@eturem_message_ja = "ファイルアクセスに失敗しました。"
|
9
|
+
if @eturem_message.match(/-\s*(?<filename>.+)\s*$/)
|
10
|
+
filename = Regexp.last_match(:filename).encode("utf-8")
|
11
|
+
@eturem_message_ja += %<ファイル "#{filename}" がありません。>
|
12
|
+
else
|
13
|
+
@eturem_message_ja += "ファイルがありません。"
|
14
|
+
end
|
15
|
+
@eturem_message_ja += "ファイル名を確認してください。"
|
16
|
+
super
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,220 @@
|
|
1
|
+
require "eturem/base"
|
2
|
+
Dir[File.expand_path("..", __FILE__) + "/*.rb"].each do |path|
|
3
|
+
require path unless path == File.expand_path(__FILE__)
|
4
|
+
end
|
5
|
+
|
6
|
+
module Eturem
|
7
|
+
def self._extend_exception(exception)
|
8
|
+
ext = case exception
|
9
|
+
when NoMemoryError then NoMemoryErrorExt
|
10
|
+
when LoadError then LoadErrorExt
|
11
|
+
# when NotImplementedError then NotImplementedErrorExt
|
12
|
+
when SyntaxError then SyntaxErrorExt
|
13
|
+
# when ScriptError then ScriptErrorExt
|
14
|
+
# when SecurityError then SecurityErrorExt
|
15
|
+
when Interrupt then InterruptExt
|
16
|
+
# when SignalException then SignalExceptionExt
|
17
|
+
when UncaughtThrowError then UncaughtThrowErrorExt
|
18
|
+
when ArgumentError then ArgumentErrorExt
|
19
|
+
# when Encoding::CompatibilityError then Encoding_CompatibilityErrorExt
|
20
|
+
# when Encoding::ConverterNotFoundError then Encoding_ConverterNotFoundErrorExt
|
21
|
+
# when Encoding::InvalidByteSequenceError then Encoding_InvalidByteSequenceErrorExt
|
22
|
+
# when Encoding::UndefinedConversionError then Encoding_UndefinedConversionErrorExt
|
23
|
+
# when EncodingError then EncodingErrorExt
|
24
|
+
# when FiberError then FiberErrorExt
|
25
|
+
# when EOFError then EOFErrorExt
|
26
|
+
# when IOError then IOErrorExt
|
27
|
+
# when KeyError then KeyErrorExt
|
28
|
+
# when ClosedQueueError then ClosedQueueErrorExt
|
29
|
+
# when StopIteration then StopIterationExt
|
30
|
+
# when IndexError then IndexErrorExt
|
31
|
+
# when LocalJumpError then LocalJumpErrorExt
|
32
|
+
# when Math::DomainError then Math_DomainErrorExt
|
33
|
+
# when NoMethodError then NoMethodErrorExt
|
34
|
+
when NameError then NameErrorExt
|
35
|
+
# when FloatDomainError then FloatDomainErrorExt
|
36
|
+
# when RangeError then RangeErrorExt
|
37
|
+
# when RegexpError then RegexpErrorExt
|
38
|
+
# when RuntimeError then RuntimeErrorExt
|
39
|
+
# when Errno::E2BIG then Errno_E2BIGExt
|
40
|
+
# when Errno::EACCES then Errno_EACCESExt
|
41
|
+
# when Errno::EADDRINUSE then Errno_EADDRINUSEExt
|
42
|
+
# when Errno::EADDRNOTAVAIL then Errno_EADDRNOTAVAILExt
|
43
|
+
# when Errno::EADV then Errno_EADVExt
|
44
|
+
# when Errno::EAFNOSUPPORT then Errno_EAFNOSUPPORTExt
|
45
|
+
# when Errno::EAGAIN then Errno_EAGAINExt
|
46
|
+
# when Errno::EALREADY then Errno_EALREADYExt
|
47
|
+
# when Errno::EAUTH then Errno_EAUTHExt
|
48
|
+
# when Errno::EBADE then Errno_EBADEExt
|
49
|
+
# when Errno::EBADF then Errno_EBADFExt
|
50
|
+
# when Errno::EBADFD then Errno_EBADFDExt
|
51
|
+
# when Errno::EBADMSG then Errno_EBADMSGExt
|
52
|
+
# when Errno::EBADR then Errno_EBADRExt
|
53
|
+
# when Errno::EBADRPC then Errno_EBADRPCExt
|
54
|
+
# when Errno::EBADRQC then Errno_EBADRQCExt
|
55
|
+
# when Errno::EBADSLT then Errno_EBADSLTExt
|
56
|
+
# when Errno::EBFONT then Errno_EBFONTExt
|
57
|
+
# when Errno::EBUSY then Errno_EBUSYExt
|
58
|
+
# when Errno::ECANCELED then Errno_ECANCELEDExt
|
59
|
+
# when Errno::ECAPMODE then Errno_ECAPMODEExt
|
60
|
+
# when Errno::ECHILD then Errno_ECHILDExt
|
61
|
+
# when Errno::ECHRNG then Errno_ECHRNGExt
|
62
|
+
# when Errno::ECOMM then Errno_ECOMMExt
|
63
|
+
# when Errno::ECONNABORTED then Errno_ECONNABORTEDExt
|
64
|
+
# when Errno::ECONNREFUSED then Errno_ECONNREFUSEDExt
|
65
|
+
# when Errno::ECONNRESET then Errno_ECONNRESETExt
|
66
|
+
# when Errno::EDEADLK then Errno_EDEADLKExt
|
67
|
+
# when Errno::EDEADLOCK then Errno_EDEADLOCKExt
|
68
|
+
# when Errno::EDESTADDRREQ then Errno_EDESTADDRREQExt
|
69
|
+
# when Errno::EDOM then Errno_EDOMExt
|
70
|
+
# when Errno::EDOOFUS then Errno_EDOOFUSExt
|
71
|
+
# when Errno::EDOTDOT then Errno_EDOTDOTExt
|
72
|
+
# when Errno::EDQUOT then Errno_EDQUOTExt
|
73
|
+
# when Errno::EEXIST then Errno_EEXISTExt
|
74
|
+
# when Errno::EFAULT then Errno_EFAULTExt
|
75
|
+
# when Errno::EFBIG then Errno_EFBIGExt
|
76
|
+
# when Errno::EFTYPE then Errno_EFTYPEExt
|
77
|
+
# when Errno::EHOSTDOWN then Errno_EHOSTDOWNExt
|
78
|
+
# when Errno::EHOSTUNREACH then Errno_EHOSTUNREACHExt
|
79
|
+
# when Errno::EHWPOISON then Errno_EHWPOISONExt
|
80
|
+
# when Errno::EIDRM then Errno_EIDRMExt
|
81
|
+
# when Errno::EILSEQ then Errno_EILSEQExt
|
82
|
+
# when Errno::EINPROGRESS then Errno_EINPROGRESSExt
|
83
|
+
# when Errno::EINTR then Errno_EINTRExt
|
84
|
+
# when Errno::EINVAL then Errno_EINVALExt
|
85
|
+
# when Errno::EIO then Errno_EIOExt
|
86
|
+
# when Errno::EIPSEC then Errno_EIPSECExt
|
87
|
+
# when Errno::EISCONN then Errno_EISCONNExt
|
88
|
+
# when Errno::EISDIR then Errno_EISDIRExt
|
89
|
+
# when Errno::EISNAM then Errno_EISNAMExt
|
90
|
+
# when Errno::EKEYEXPIRED then Errno_EKEYEXPIREDExt
|
91
|
+
# when Errno::EKEYREJECTED then Errno_EKEYREJECTEDExt
|
92
|
+
# when Errno::EKEYREVOKED then Errno_EKEYREVOKEDExt
|
93
|
+
# when Errno::EL2HLT then Errno_EL2HLTExt
|
94
|
+
# when Errno::EL2NSYNC then Errno_EL2NSYNCExt
|
95
|
+
# when Errno::EL3HLT then Errno_EL3HLTExt
|
96
|
+
# when Errno::EL3RST then Errno_EL3RSTExt
|
97
|
+
# when Errno::ELIBACC then Errno_ELIBACCExt
|
98
|
+
# when Errno::ELIBBAD then Errno_ELIBBADExt
|
99
|
+
# when Errno::ELIBEXEC then Errno_ELIBEXECExt
|
100
|
+
# when Errno::ELIBMAX then Errno_ELIBMAXExt
|
101
|
+
# when Errno::ELIBSCN then Errno_ELIBSCNExt
|
102
|
+
# when Errno::ELNRNG then Errno_ELNRNGExt
|
103
|
+
# when Errno::ELOOP then Errno_ELOOPExt
|
104
|
+
# when Errno::EMEDIUMTYPE then Errno_EMEDIUMTYPEExt
|
105
|
+
# when Errno::EMFILE then Errno_EMFILEExt
|
106
|
+
# when Errno::EMLINK then Errno_EMLINKExt
|
107
|
+
# when Errno::EMSGSIZE then Errno_EMSGSIZEExt
|
108
|
+
# when Errno::EMULTIHOP then Errno_EMULTIHOPExt
|
109
|
+
# when Errno::ENAMETOOLONG then Errno_ENAMETOOLONGExt
|
110
|
+
# when Errno::ENAVAIL then Errno_ENAVAILExt
|
111
|
+
# when Errno::ENEEDAUTH then Errno_ENEEDAUTHExt
|
112
|
+
# when Errno::ENETDOWN then Errno_ENETDOWNExt
|
113
|
+
# when Errno::ENETRESET then Errno_ENETRESETExt
|
114
|
+
# when Errno::ENETUNREACH then Errno_ENETUNREACHExt
|
115
|
+
# when Errno::ENFILE then Errno_ENFILEExt
|
116
|
+
# when Errno::ENOANO then Errno_ENOANOExt
|
117
|
+
# when Errno::ENOATTR then Errno_ENOATTRExt
|
118
|
+
# when Errno::ENOBUFS then Errno_ENOBUFSExt
|
119
|
+
# when Errno::ENOCSI then Errno_ENOCSIExt
|
120
|
+
# when Errno::ENODATA then Errno_ENODATAExt
|
121
|
+
# when Errno::ENODEV then Errno_ENODEVExt
|
122
|
+
when Errno::ENOENT then Errno_ENOENTExt
|
123
|
+
# when Errno::ENOEXEC then Errno_ENOEXECExt
|
124
|
+
# when Errno::ENOKEY then Errno_ENOKEYExt
|
125
|
+
# when Errno::ENOLCK then Errno_ENOLCKExt
|
126
|
+
# when Errno::ENOLINK then Errno_ENOLINKExt
|
127
|
+
# when Errno::ENOMEDIUM then Errno_ENOMEDIUMExt
|
128
|
+
# when Errno::ENOMEM then Errno_ENOMEMExt
|
129
|
+
# when Errno::ENOMSG then Errno_ENOMSGExt
|
130
|
+
# when Errno::ENONET then Errno_ENONETExt
|
131
|
+
# when Errno::ENOPKG then Errno_ENOPKGExt
|
132
|
+
# when Errno::ENOPROTOOPT then Errno_ENOPROTOOPTExt
|
133
|
+
# when Errno::ENOSPC then Errno_ENOSPCExt
|
134
|
+
# when Errno::ENOSR then Errno_ENOSRExt
|
135
|
+
# when Errno::ENOSTR then Errno_ENOSTRExt
|
136
|
+
# when Errno::ENOSYS then Errno_ENOSYSExt
|
137
|
+
# when Errno::ENOTBLK then Errno_ENOTBLKExt
|
138
|
+
# when Errno::ENOTCAPABLE then Errno_ENOTCAPABLEExt
|
139
|
+
# when Errno::ENOTCONN then Errno_ENOTCONNExt
|
140
|
+
# when Errno::ENOTDIR then Errno_ENOTDIRExt
|
141
|
+
# when Errno::ENOTEMPTY then Errno_ENOTEMPTYExt
|
142
|
+
# when Errno::ENOTNAM then Errno_ENOTNAMExt
|
143
|
+
# when Errno::ENOTRECOVERABLE then Errno_ENOTRECOVERABLEExt
|
144
|
+
# when Errno::ENOTSOCK then Errno_ENOTSOCKExt
|
145
|
+
# when Errno::ENOTSUP then Errno_ENOTSUPExt
|
146
|
+
# when Errno::ENOTTY then Errno_ENOTTYExt
|
147
|
+
# when Errno::ENOTUNIQ then Errno_ENOTUNIQExt
|
148
|
+
# when Errno::ENXIO then Errno_ENXIOExt
|
149
|
+
# when Errno::EOPNOTSUPP then Errno_EOPNOTSUPPExt
|
150
|
+
# when Errno::EOVERFLOW then Errno_EOVERFLOWExt
|
151
|
+
# when Errno::EOWNERDEAD then Errno_EOWNERDEADExt
|
152
|
+
# when Errno::EPERM then Errno_EPERMExt
|
153
|
+
# when Errno::EPFNOSUPPORT then Errno_EPFNOSUPPORTExt
|
154
|
+
# when Errno::EPIPE then Errno_EPIPEExt
|
155
|
+
# when Errno::EPROCLIM then Errno_EPROCLIMExt
|
156
|
+
# when Errno::EPROCUNAVAIL then Errno_EPROCUNAVAILExt
|
157
|
+
# when Errno::EPROGMISMATCH then Errno_EPROGMISMATCHExt
|
158
|
+
# when Errno::EPROGUNAVAIL then Errno_EPROGUNAVAILExt
|
159
|
+
# when Errno::EPROTO then Errno_EPROTOExt
|
160
|
+
# when Errno::EPROTONOSUPPORT then Errno_EPROTONOSUPPORTExt
|
161
|
+
# when Errno::EPROTOTYPE then Errno_EPROTOTYPEExt
|
162
|
+
# when Errno::ERANGE then Errno_ERANGEExt
|
163
|
+
# when Errno::EREMCHG then Errno_EREMCHGExt
|
164
|
+
# when Errno::EREMOTE then Errno_EREMOTEExt
|
165
|
+
# when Errno::EREMOTEIO then Errno_EREMOTEIOExt
|
166
|
+
# when Errno::ERESTART then Errno_ERESTARTExt
|
167
|
+
# when Errno::ERFKILL then Errno_ERFKILLExt
|
168
|
+
# when Errno::EROFS then Errno_EROFSExt
|
169
|
+
# when Errno::ERPCMISMATCH then Errno_ERPCMISMATCHExt
|
170
|
+
# when Errno::ESHUTDOWN then Errno_ESHUTDOWNExt
|
171
|
+
# when Errno::ESOCKTNOSUPPORT then Errno_ESOCKTNOSUPPORTExt
|
172
|
+
# when Errno::ESPIPE then Errno_ESPIPEExt
|
173
|
+
# when Errno::ESRCH then Errno_ESRCHExt
|
174
|
+
# when Errno::ESRMNT then Errno_ESRMNTExt
|
175
|
+
# when Errno::ESTALE then Errno_ESTALEExt
|
176
|
+
# when Errno::ESTRPIPE then Errno_ESTRPIPEExt
|
177
|
+
# when Errno::ETIME then Errno_ETIMEExt
|
178
|
+
# when Errno::ETIMEDOUT then Errno_ETIMEDOUTExt
|
179
|
+
# when Errno::ETOOMANYREFS then Errno_ETOOMANYREFSExt
|
180
|
+
# when Errno::ETXTBSY then Errno_ETXTBSYExt
|
181
|
+
# when Errno::EUCLEAN then Errno_EUCLEANExt
|
182
|
+
# when Errno::EUNATCH then Errno_EUNATCHExt
|
183
|
+
# when Errno::EUSERS then Errno_EUSERSExt
|
184
|
+
# when Errno::EWOULDBLOCK then Errno_EWOULDBLOCKExt
|
185
|
+
# when Errno::EXDEV then Errno_EXDEVExt
|
186
|
+
# when Errno::EXFULL then Errno_EXFULLExt
|
187
|
+
# when Errno::EXXX then Errno_EXXXExt
|
188
|
+
# when Errno::NOERROR then Errno_NOERRORExt
|
189
|
+
# when SystemCallError then SystemCallErrorExt
|
190
|
+
# when ThreadError then ThreadErrorExt
|
191
|
+
when TypeError then TypeErrorExt
|
192
|
+
when ZeroDivisionError then ZeroDivisionErrorExt
|
193
|
+
# when StandardError then StandardErrorExt
|
194
|
+
when SystemStackError then SystemStackErrorExt
|
195
|
+
end
|
196
|
+
return ext if ext
|
197
|
+
ext = case exception.class.to_s
|
198
|
+
# when "FrozenError" then FrozenErrorExt
|
199
|
+
when "DXRuby::DXRubyError" then DXRubyErrorExt
|
200
|
+
end
|
201
|
+
return ext
|
202
|
+
end
|
203
|
+
|
204
|
+
module ExceptionExt
|
205
|
+
def eturem_location_to_s(location)
|
206
|
+
%<"#{location.path}" #{location.lineno}行目: '#{location.label}'>
|
207
|
+
end
|
208
|
+
|
209
|
+
def eturem_traceback(order = :bottom)
|
210
|
+
order == :top ? "" : "\e[1mTraceback\e[0m(エラー発生までの流れを直前のものほど下に表示しています。):\n"
|
211
|
+
end
|
212
|
+
|
213
|
+
def eturem_message()
|
214
|
+
"\e[1;31m【エラー】\e[0m" +
|
215
|
+
(@eturem_path == "(eval)" ? "eval 中の" : %<ファイル"#{@eturem_path}">) +
|
216
|
+
" #{@eturem_lineno}行目:\e[1m(\e[4m#{self.class}\e[0;1m)\n" +
|
217
|
+
"#{@eturem_message_ja || @eturem_message}"
|
218
|
+
end
|
219
|
+
end
|
220
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Eturem
|
2
|
+
module NameErrorExt
|
3
|
+
include ExceptionExt
|
4
|
+
|
5
|
+
def eturem_message()
|
6
|
+
if self.name.to_s.encode("utf-8").include?(" ")
|
7
|
+
eturem_multibyte_space
|
8
|
+
elsif self.name.to_s.encode("utf-8").match(/[”’`(){}#]/)
|
9
|
+
eturem_multibyte_char
|
10
|
+
elsif self.receiver == nil
|
11
|
+
eturem_receiver_is_nil
|
12
|
+
else
|
13
|
+
eturem_basic_name_error
|
14
|
+
end
|
15
|
+
super
|
16
|
+
end
|
17
|
+
|
18
|
+
def eturem_multibyte_space
|
19
|
+
@eturem_script_lines = Eturem::Base.read_script(@eturem_path)
|
20
|
+
Eturem::Base.highlight(@eturem_script_lines[@eturem_lineno], / +/, "\e[1;4;31m")
|
21
|
+
@eturem_message_ja = "スクリプト中に全角空白が混じっています。"
|
22
|
+
end
|
23
|
+
|
24
|
+
def eturem_multibyte_char
|
25
|
+
@eturem_script_lines = Eturem::Base.read_script(@eturem_path)
|
26
|
+
if @eturem_script_lines[@eturem_lineno]
|
27
|
+
@eturem_script_lines[@eturem_lineno].gsub!(/[”’`()#]+/){ "\e[1;4;31m#{$&}\e[0m" }
|
28
|
+
end
|
29
|
+
@eturem_message_ja = "スクリプト中に全角記号が混じっています。"
|
30
|
+
end
|
31
|
+
|
32
|
+
def eturem_receiver_is_nil
|
33
|
+
@eturem_message_ja =
|
34
|
+
"nil に対して #{self.name.to_s.encode("utf-8")} というメソッドを呼び出そうとしています。\n" +
|
35
|
+
"変数の値/メソッドの返値が予期せず nil になっている可能性があります。"
|
36
|
+
end
|
37
|
+
|
38
|
+
def eturem_basic_name_error
|
39
|
+
@eturem_message_ja =
|
40
|
+
(self.is_a?(NoMethodError) ? "メソッド" : "変数/メソッド") +
|
41
|
+
"「\e[1;4;31m#{self.name.to_s.encode("utf-8")}\e[0m」は存在しません。"
|
42
|
+
unless @eturem_corrections.empty?
|
43
|
+
did_you_mean = @eturem_corrections.map{ |d|
|
44
|
+
"\e[1;33m#{d.to_s.encode("utf-8")}\e[0m"
|
45
|
+
}.join(" / ")
|
46
|
+
@eturem_message_ja += "「#{did_you_mean}」の入力ミスではありませんか?"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
module Eturem
|
2
|
+
module SyntaxErrorExt
|
3
|
+
include ExceptionExt
|
4
|
+
|
5
|
+
def eturem_message()
|
6
|
+
if @eturem_message.match(/unexpected (?<unexpected>(?:','|[^,])+)/)
|
7
|
+
eturem_unexpected(eturem_transform_keyword(Regexp.last_match(:unexpected)))
|
8
|
+
elsif @eturem_message.match(/Invalid (?<invalid>(?:break|next|retry|redo|yield))/)
|
9
|
+
eturem_invalid(Regexp.last_match(:invalid))
|
10
|
+
elsif @eturem_message.include?("unterminated string meets end of file")
|
11
|
+
eturem_unterminated_string
|
12
|
+
elsif @eturem_message.include?("unterminated regexp meets end of file")
|
13
|
+
eturem_unterminated_regexp
|
14
|
+
end
|
15
|
+
super
|
16
|
+
end
|
17
|
+
|
18
|
+
def eturem_unexpected(unexpected)
|
19
|
+
expecting = ["ファイルの末尾"]
|
20
|
+
if @eturem_message.match(/[,\s]expecting (?<expecting>.+)/)
|
21
|
+
expecting = Regexp.last_match(:expecting).split(" or ").map do |exp|
|
22
|
+
eturem_transform_keyword(exp)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
Eturem::Base.highlight(@eturem_script_lines[@eturem_lineno], unexpected, "\e[1;4;31m")
|
26
|
+
|
27
|
+
keywords = %w[if unless case while until for begin def class module do].select do |keyword|
|
28
|
+
@eturem_script_lines.join.include?(keyword)
|
29
|
+
end
|
30
|
+
keywords = "「#{keywords.join(" / ")}」"
|
31
|
+
keywords = "ifなど" if keywords == "「」"
|
32
|
+
if unexpected == "ファイルの末尾"
|
33
|
+
@eturem_message_ja =
|
34
|
+
"(ただし、実際のエラーの原因はおそらく#{@eturem_lineno}行目より前にあります。)\n"
|
35
|
+
if expecting.join == "ファイルの末尾"
|
36
|
+
@eturem_message_ja += "構文エラーです。何か足りないものがあるようです。"
|
37
|
+
else
|
38
|
+
@eturem_message_ja += "構文エラーです。 #{expecting.join(" または ")} が足りない可能性があります。"
|
39
|
+
end
|
40
|
+
if expecting.include?("end")
|
41
|
+
@eturem_message_ja += "#{keywords}に対応する「end」があるか確認してください。"
|
42
|
+
end
|
43
|
+
elsif expecting.join == "ファイルの末尾"
|
44
|
+
@eturem_message_ja =
|
45
|
+
"構文エラーです。予期せぬ #{unexpected} があります。以下のような可能性があります。\n" +
|
46
|
+
"・その直前に何らかのエラーの原因がある。\n" +
|
47
|
+
"・#{unexpected} が余分に書かれている、またはタイプミスで予期せず書いてしまった。"
|
48
|
+
if unexpected == "end"
|
49
|
+
@eturem_message_ja += "\n・#{keywords}と「end」の対応が合っていない。"
|
50
|
+
end
|
51
|
+
elsif !expecting.empty?
|
52
|
+
@eturem_message_ja =
|
53
|
+
"構文エラーです。 #{expecting.join(" または ")} が来るべき場所に、" +
|
54
|
+
"#{unexpected} が来てしまいました。"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def eturem_invalid(invalid)
|
59
|
+
Eturem::Base.highlight(@eturem_script_lines[@eturem_lineno], invalid, "\e[1;4;31m")
|
60
|
+
@eturem_message_ja = "#{invalid} が不適切な場所にあります。"
|
61
|
+
end
|
62
|
+
|
63
|
+
def eturem_unterminated_string()
|
64
|
+
@eturem_message_ja = "文字列が閉じられていません。「\"」や「'」を確認してください。"
|
65
|
+
end
|
66
|
+
|
67
|
+
def eturem_unterminated_regexp()
|
68
|
+
@eturem_message_ja = "正規表現が閉じられていません。「/」を確認してください。"
|
69
|
+
end
|
70
|
+
|
71
|
+
def eturem_transform_keyword(keyword)
|
72
|
+
case keyword
|
73
|
+
when "end-of-input", "$end"
|
74
|
+
"ファイルの末尾"
|
75
|
+
when /^(?:keyword|modifier)_/
|
76
|
+
Regexp.last_match.post_match
|
77
|
+
when "'\\n'"
|
78
|
+
"改行"
|
79
|
+
when "backslash"
|
80
|
+
"\\"
|
81
|
+
when /^[`']([^']+)'$/
|
82
|
+
$1
|
83
|
+
else
|
84
|
+
keyword
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|