Spec-Zone.ru › Ruby 3.2

класс SyntaxSuggest::PathnameFromMessage

Родитель:
Объект

Преобразует сообщение SyntaxError в путь

Обрабатывает случаи, когда имя файла содержит двоеточие, например, в файловой системе Windows: github.com/ruby/syntax_suggest/issues/111

Пример:

message = "/tmp/scratch:2:in `require_relative': /private/tmp/bad.rb:1: syntax error, unexpected `end' (SyntaxError)"
puts PathnameFromMessage.new(message).call.name
# => "/tmp/scratch.rb"

Константы

EVAL_RE
STREAMING_RE

Атрибуты

name[R]

Публичные Классовые Методы

new(message, io: $stderr) Показать исходный код
# File lib/syntax_suggest/pathname_from_message.rb, line 20
def initialize(message, io: $stderr)
  @line = message.lines.first
  @parts = @line.split(":")
  @guess = []
  @name = nil
  @io = io
end

Публичные Методы Экземпляров

call() Показать исходный код
# File lib/syntax_suggest/pathname_from_message.rb, line 28
def call
  if skip_missing_file_name?
    if ENV["SYNTAX_SUGGEST_DEBUG"]
      @io.puts "SyntaxSuggest: Could not find filename from #{@line.inspect}"
    end
  else
    until stop?
      @guess << @parts.shift
      @name = Pathname(@guess.join(":"))
    end

    if @parts.empty?
      @io.puts "SyntaxSuggest: Could not find filename from #{@line.inspect}"
      @name = nil
    end
  end

  self
end
skip_missing_file_name?() Показать исходный код
# File lib/syntax_suggest/pathname_from_message.rb, line 55
def skip_missing_file_name?
  @line.match?(EVAL_RE) || @line.match?(STREAMING_RE)
end
stop?() Показать исходный код
# File lib/syntax_suggest/pathname_from_message.rb, line 48
def stop?
  return true if @parts.empty?
  return false if @guess.empty?

  @name&.exist?
end

Ruby Core © 1993–2022 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

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