Spec-Zone.ru › Ruby 3.2

модуль DidYouMean

Учебник DidYouMean добавляет возможность предлагать возможные имена методов/классов при ошибках, таких как NameError и NoMethodError. В Ruby 2.3 или более поздних версиях он автоматически активируется во время запуска.

@example

methosd
# => NameError: undefined local variable or method `methosd' for main:Object
#   Did you mean?  methods
#                  method

OBject
# => NameError: uninitialized constant OBject
#    Did you mean?  Object

@full_name = "Yuki Nishijima"
first_name, last_name = full_name.split(" ")
# => NameError: undefined local variable or method `full_name' for main:Object
#    Did you mean?  @full_name

@@full_name = "Yuki Nishijima"
@@full_anme
# => NameError: uninitialized class variable @@full_anme in Object
#    Did you mean?  @@full_name

full_name = "Yuki Nishijima"
full_name.starts_with?("Y")
# => NoMethodError: undefined method `starts_with?' for "Yuki Nishijima":String
#    Did you mean?  start_with?

hash = {foo: 1, bar: 2, baz: 3}
hash.fetch(:fooo)
# => KeyError: key not found: :fooo
#    Did you mean?  :foo

Отключение did_you_mean

Иногда вам может потребоваться отключить учебник did_you_mean для отладки проблем в самом объекте ошибки. Вы можете полностью отключить его, указав параметр --disable-did_you_mean для команды ruby.

$ ruby --disable-did_you_mean -e "1.zeor?"
-e:1:in `<main>': undefined method `zeor?' for 1:Integer (NameError)

Если у вас нет прямого доступа к команде ruby (например, +rails console+, irb), вы можете применить параметры, используя переменную окружения RUBYOPT.

$ RUBYOPT='--disable-did_you_mean' irb
irb:0> 1.zeor?
# => NoMethodError (undefined method `zeor?' for 1:Integer)

Получение исходного сообщения об ошибке

Иногда вам не нужно полностью отключать учебник, но требуется получить исходное сообщение об ошибке без предложений (например, при тестировании). В этом случае вы можете использовать метод #original_message для объекта ошибки:

no_method_error = begin
                    1.zeor?
                  rescue NoMethodError => error
                    error
                  end

no_method_error.message
# => NoMethodError (undefined method `zeor?' for 1:Integer)
#    Did you mean?  zero?

no_method_error.original_message
# => NoMethodError (undefined method `zeor?' for 1:Integer)

Константы

PlainFormatter

DidYouMean::Formatter — это базовый, по умолчанию используемый форматировщик для учебника. Форматировщик отвечает на метод message_for и возвращает удобочитаемую строку.

SPELL_CHECKERS

TODO: Удалить в версии 3.3:

VERSION
VerboseFormatter

DidYouMean::Formatter — это базовый, по умолчанию используемый форматировщик для учебника. Форматировщик отвечает на метод message_for и возвращает удобочитаемую строку.

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

correct_error(error_class, spell_checker) Показать исходный код
# File lib/did_you_mean.rb, line 97
def self.correct_error(error_class, spell_checker)
  if defined?(Ractor)
    new_mapping = { **@spell_checkers, error_class.to_s => spell_checker }
    new_mapping.default = NullChecker

    @spell_checkers = Ractor.make_shareable(new_mapping)
  else
    spell_checkers[error_class.to_s] = spell_checker
  end

  error_class.prepend(Correctable) if error_class.is_a?(Class) && !(error_class < Correctable)
end

Добавляет функциональность DidYouMean к ошибке с помощью заданного орфографического проверяющего.

formatter() Показать исходный код
# File lib/did_you_mean.rb, line 141
def self.formatter
  if defined?(Ractor)
    Ractor.current[:__did_you_mean_formatter__] || Formatter
  else
    Formatter
  end
end

Возвращает текущий установленный форматировщик. По умолчанию он установлен на DidYouMean::Formatter.

formatter=(formatter) Показать исходный код
# File lib/did_you_mean.rb, line 150
def self.formatter=(formatter)
  if defined?(Ractor)
    Ractor.current[:__did_you_mean_formatter__] = formatter
  end
end

Обновляет основной форматировщик, используемый для форматирования предложений.

spell_checkers() Показать исходный код
# File lib/did_you_mean.rb, line 92
def self.spell_checkers
  @spell_checkers
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