Class: RuboCop::Cop::RBS::Style::OptionalNil

Inherits:
RBS::CopBase
  • Object
show all
Extended by:
AutoCorrector
Defined in:
lib/rubocop/cop/rbs/style/optional_nil.rb

Overview

‘nil?` is the same as `nil`.

Examples:

# bad
def foo: (nil?) -> void

# good
def foo: (nil) -> void

Instance Attribute Summary

Attributes inherited from RBS::CopBase

#processed_rbs_source

Instance Method Summary collapse

Methods inherited from RBS::CopBase

documentation_url, #investigation_rbs, #location_to_range, #on_new_investigation, #on_other_file, #on_rbs_class, #on_rbs_interface, #on_rbs_module, #on_rbs_new_investigation, #on_rbs_parsing_error, #on_rbs_private, #on_rbs_public, #parse_rbs, #rbs_buffer, #tokenize, #walk

Methods included from RBS::OnTypeHelper

#on_not_type, #on_type

Instance Method Details

#check_type(type) ⇒ Object



28
29
30
31
32
33
34
35
# File 'lib/rubocop/cop/rbs/style/optional_nil.rb', line 28

def check_type(type)
  find_replacement(type) do |t, replaced|
    range = location_to_range(t.location)
    add_offense(range, message: "Use `#{replaced}` instead of `#{t}`") do |corrector|
      corrector.replace(range, replaced.to_s)
    end
  end
end

#find_replacement(type, &block) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/rubocop/cop/rbs/style/optional_nil.rb', line 44

def find_replacement(type, &block)
  case type
  when ::RBS::Types::Optional
    case type.type
    when ::RBS::Types::Bases::Nil
      block.call([type, ::RBS::Types::Bases::Nil.new(location: nil)])
    else
      find_replacement(type.type, &block)
    end
  else
    type.each_type do |type|
      find_replacement(type, &block)
    end
  end
end

#on_rbs_constant(const) ⇒ Object Also known as: on_rbs_global, on_rbs_type_alias, on_rbs_attribute, on_rbs_var



37
# File 'lib/rubocop/cop/rbs/style/optional_nil.rb', line 37

def on_rbs_constant(const) = check_type(const.type)

#on_rbs_def(decl) ⇒ Object



20
21
22
23
24
25
26
# File 'lib/rubocop/cop/rbs/style/optional_nil.rb', line 20

def on_rbs_def(decl)
  decl.overloads.each do |overload|
    overload.method_type.each_type do |type|
      check_type(type)
    end
  end
end