класс SyntaxSuggest::ExplainSyntax
Объясняет ошибки синтаксиса на основе их источника
Пример:
source = "def foo; puts 'lol'" # Note missing end explain ExplainSyntax.new( code_lines: CodeLine.from_source(source) ).call explain.errors.first # => "Unmatched keyword, missing `end' ?"
Если ошибку невозможно определить по подсчёту лексем, то парсер запускается на входных данных, и возвращаются исходные ошибки.
Пример:
source = "1 * " # Note missing a second number explain ExplainSyntax.new( code_lines: CodeLine.from_source(source) ).call explain.errors.first # => "syntax error, unexpected end-of-input"
Константы
- INVERSE
Публичные методы класса
Исходный код
# File lib/syntax_suggest/explain_syntax.rb, line 54 def initialize(code_lines:) @code_lines = code_lines @left_right = LeftRightLexCount.new @missing = nil end
Публичные методы экземпляра
Исходный код
# File lib/syntax_suggest/explain_syntax.rb, line 60
def call
@code_lines.each do |line|
line.lex.each do |lex|
@left_right.count_lex(lex)
end
end
self
end Исходный код
# File lib/syntax_suggest/explain_syntax.rb, line 109
def errors
if missing.empty?
return GetParseErrors.errors(@code_lines.map(&:original).join).uniq
end
missing.map { |miss| why(miss) }
end Возвращает массив сообщений об ошибках синтаксиса
Если не найдены пропущенные пары, то используется исходное сообщение об ошибке.
Исходный код
# File lib/syntax_suggest/explain_syntax.rb, line 79 def missing @missing ||= @left_right.missing end
Возвращает массив пропущенных элементов
Например, вот так:
ExplainSyntax.new(code_lines: lines).missing # => ["}"]
Это означает, что в исходном коде отсутствует символ ‘}`.
Исходный код
# File lib/syntax_suggest/explain_syntax.rb, line 91
def why(miss)
case miss
when "keyword"
"Unmatched `end', missing keyword (`do', `def`, `if`, etc.) ?"
when "end"
"Unmatched keyword, missing `end' ?"
else
inverse = INVERSE.fetch(miss) {
raise "Unknown explain syntax char or key: #{miss.inspect}"
}
"Unmatched `#{inverse}', missing `#{miss}' ?"
end
end Преобразует пропущенную строку в удобочитаемое объяснение.
Пример:
explain.why("}")
# => "Unmatched `{', missing `}' ?"
Ruby Core © 1993–2024 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.