Class: Hashira::Smells::Foreign

Inherits:
Object
  • Object
show all
Defined in:
lib/hashira/smells/foreign.rb

Constant Summary collapse

TYPE_TESTS =
%i[is_a? kind_of? instance_of?].freeze
KEYED_READS =
%i[[] fetch values_at dig key?].freeze
KEYS =
[Prism::StringNode, Prism::SymbolNode].freeze
LITERALS =
[Prism::HashNode, Prism::KeywordHashNode, Prism::ArrayNode, Prism::StringNode].freeze
STATE =
[
  Prism::InstanceVariableReadNode, Prism::InstanceVariableWriteNode,
  Prism::InstanceVariableOrWriteNode, Prism::InstanceVariableAndWriteNode,
  Prism::InstanceVariableOperatorWriteNode, Prism::InstanceVariableTargetNode
].freeze

Instance Method Summary collapse

Constructor Details

#initialize(subject, ownership) ⇒ Foreign

Returns a new instance of Foreign.



20
21
22
23
24
25
# File 'lib/hashira/smells/foreign.rb', line 20

def initialize(subject, ownership)
  node = subject.node
  @body = Hashira::Smells::Scope.inside(node)
  @tail = tail(node)
  @ownership = ownership
end

Instance Method Details

#dismiss?(name) ⇒ Boolean

Returns:

  • (Boolean)


27
28
29
30
# File 'lib/hashira/smells/foreign.rb', line 27

def dismiss?(name)
  convert? || fenced?(name) || wire?(name) || built?(name) ||
    derived?(name) || rescued?(name)
end

#reachesObject



32
33
34
# File 'lib/hashira/smells/foreign.rb', line 32

def reaches
  tests { true }.reject { @ownership.owned?(it) }.map(&:first).uniq
end