class DidYouMean::MethodNameChecker - Documentation for Ruby 3.3

# class DidYouMean::MethodNameChecker

### Constants

NAMES_TO_EXCLUDE
RB_RESERVED_WORDS

  `MethodNameChecker::RB_RESERVED_WORDS` is the list of reserved words in Ruby that take an argument. Unlike `VariableNameChecker::RB_RESERVED_WORDS`, these reserved words require an argument, and a `NoMethodError` is raised due to the presence of the argument.

  The `MethodNameChecker` will use this list to suggest a reversed word if a `NoMethodError` is raised and found closest matches.

  Also see `VariableNameChecker::RB_RESERVED_WORDS`.

### Attributes

method_name[R]
receiver[R]

### Public Class Methods

new(exception) click to toggle source

    # File lib/did_you_mean/spell_checkers/method_name_checker.rb, line 42
    def initialize(exception)
      @method_name  = exception.name
      @receiver     = exception.receiver
      @private_call = exception.respond_to?(:private_call?) ? exception.private_call? : false
    end

### Public Instance Methods

corrections() click to toggle source

    # File lib/did_you_mean/spell_checkers/method_name_checker.rb, line 48
    def corrections
      @corrections ||= begin
                         dictionary = method_names
                         dictionary = RB_RESERVED_WORDS + dictionary if @private_call

                         SpellChecker.new(dictionary: dictionary).correct(method_name) - names_to_exclude
                       end
    end

method_names() click to toggle source

    # File lib/did_you_mean/spell_checkers/method_name_checker.rb, line 57
    def method_names
      if Object === receiver
        method_names = receiver.methods + receiver.singleton_methods
        method_names += receiver.private_methods if @private_call
        method_names.uniq!
        # Assume that people trying to use a writer are not interested in a reader
        # and vice versa
        if method_name.match?(/=\Z/)
          method_names.select! { |name| name.match?(/=\Z/) }
        else
          method_names.reject! { |name| name.match?(/=\Z/) }
        end
        method_names
      else
        []
      end
    end

names_to_exclude() click to toggle source

    # File lib/did_you_mean/spell_checkers/method_name_checker.rb, line 75
    def names_to_exclude
      Object === receiver ? NAMES_TO_EXCLUDE[receiver.class] : []
    end