Class: StrictIvars::Processor

Inherits:
BaseProcessor show all
Defined in:
lib/strict_ivars/processor.rb

Constant Summary

Constants inherited from BaseProcessor

BaseProcessor::EVAL_METHODS

Instance Attribute Summary

Attributes inherited from BaseProcessor

#annotations

Instance Method Summary collapse

Methods inherited from BaseProcessor

call, #initialize, #visit_call_node

Constructor Details

This class inherits a constructor from StrictIvars::BaseProcessor

Instance Method Details

#visit_block_node(node) ⇒ Object

: (Prism::BlockNode) -> void



15
16
17
# File 'lib/strict_ivars/processor.rb', line 15

def visit_block_node(node)
  new_context { super }
end

#visit_case_node(node) ⇒ Object

: (Prism::CaseNode) -> void



38
39
40
41
42
43
44
45
46
# File 'lib/strict_ivars/processor.rb', line 38

def visit_case_node(node)
  visit(node.predicate)

  node.conditions.each do |condition|
    branch { visit(condition) }
  end

  branch { visit(node.else_clause) }
end

#visit_class_node(node) ⇒ Object

: (Prism::ClassNode) -> void



5
6
7
# File 'lib/strict_ivars/processor.rb', line 5

def visit_class_node(node)
  new_context { super }
end

#visit_def_node(node) ⇒ Object

: (Prism::DefNode) -> void



25
26
27
# File 'lib/strict_ivars/processor.rb', line 25

def visit_def_node(node)
  new_context { super }
end

#visit_defined_node(node) ⇒ Object

: (Prism::DefinedNode) -> void



49
50
51
52
53
54
55
# File 'lib/strict_ivars/processor.rb', line 49

def visit_defined_node(node)
  value = node.value

  return if Prism::InstanceVariableReadNode === value

  super
end

#visit_if_node(node) ⇒ Object

: (Prism::IfNode) -> void



30
31
32
33
34
35
# File 'lib/strict_ivars/processor.rb', line 30

def visit_if_node(node)
  visit(node.predicate)

  branch { visit(node.statements) }
  branch { visit(node.subsequent) }
end

#visit_instance_variable_read_node(node) ⇒ Object

: (Prism::InstanceVariableReadNode) -> void



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/strict_ivars/processor.rb', line 58

def visit_instance_variable_read_node(node)
  name = node.name

  unless @context.include?(name)
    location = node.location

    @context << name

    @annotations.push(
      [location.start_character_offset, "(defined?(#{name}) ? "],
      [location.end_character_offset, " : (::Kernel.raise(::StrictIvars::NameError.new(self, :#{name}))))"]
    )
  end

  super
end

#visit_module_node(node) ⇒ Object

: (Prism::ModuleNode) -> void



10
11
12
# File 'lib/strict_ivars/processor.rb', line 10

def visit_module_node(node)
  new_context { super }
end

#visit_singleton_class_node(node) ⇒ Object

: (Prism::SingletonClassNode) -> void



20
21
22
# File 'lib/strict_ivars/processor.rb', line 20

def visit_singleton_class_node(node)
  new_context { super }
end