Spec-Zone.ru › Ruby 3.4

класс 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

Публичные методы класса

new (code_lines:)
Исходный код
# File lib/syntax_suggest/explain_syntax.rb, line 54
def initialize(code_lines:)
  @code_lines = code_lines
  @left_right = LeftRightLexCount.new
  @missing = nil
end

Публичные методы экземпляра

call ()
Исходный код
# 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
errors ()
Исходный код
# 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

Возвращает массив сообщений об ошибках синтаксиса

Если не найдены пропущенные пары, то используется исходное сообщение об ошибке.

missing ()
Исходный код
# File lib/syntax_suggest/explain_syntax.rb, line 79
def missing
  @missing ||= @left_right.missing
end

Возвращает массив пропущенных элементов

Например, вот так:

ExplainSyntax.new(code_lines: lines).missing
# => ["}"]

Это означает, что в исходном коде отсутствует символ ‘}`.

why (miss)
Исходный код
# 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API