Class: RuboCop::Cop::RBS::Style::InstanceWithInstance

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

Overview

Checks that ‘instance` in instance context.

Examples:

# bad
def foo: (instance) -> instance

# good
def foo: (self) -> self

Constant Summary collapse

MSG =
'Use `self` instead of `instance`.'

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_attribute, #on_rbs_constant, #on_rbs_def, #on_rbs_global, #on_rbs_interface, #on_rbs_module, #on_rbs_new_investigation, #on_rbs_parsing_error, #on_rbs_private, #on_rbs_public, #on_rbs_type_alias, #on_rbs_var, #parse_rbs, #rbs_buffer, #tokenize, #walk

Methods included from RBS::OnTypeHelper

#on_not_type, #on_type

Instance Method Details

#check_type(type) ⇒ Object



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

def check_type(type)
  case type
  when ::RBS::Types::Bases::Instance
    return unless type.location

    range = location_to_range(type.location)
    add_offense(range) do |corrector|
      corrector.replace(range, 'self')
    end
  else
    type.each_type do |t|
      check_type(t)
    end
  end
end

#on_rbs_class(decl) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/rubocop/cop/rbs/style/instance_with_instance.rb', line 22

def on_rbs_class(decl)
  # The meaning of `self` and `instance` changes in generic class.
  return unless decl.type_params.empty?

  decl.members.each do |member|
    case member
    when ::RBS::AST::Members::MethodDefinition
      next unless member.kind == :instance

      member.overloads.each do |overload|
        overload.method_type.each_type do |type|
          check_type(type)
        end
      end
    when ::RBS::AST::Members::InstanceVariable
      check_type(member.type)
    end
  end
end