Class: JRuby::Lint::Checkers::NonAtomic

Inherits:
Object
  • Object
show all
Includes:
JRuby::Lint::Checker
Defined in:
lib/jruby/lint/checkers/nonatomic.rb

Instance Attribute Summary

Attributes included from JRuby::Lint::Checker

#collector

Instance Method Summary collapse

Methods included from JRuby::Lint::Checker

included, loaded_checkers

Instance Method Details

#add_finding(collector, node) ⇒ Object



32
33
34
35
# File 'lib/jruby/lint/checkers/nonatomic.rb', line 32

def add_finding(collector, node)
  collector.findings << Finding.new("Non-local operator assignment is not guaranteed to be atomic",
                                    [:nonatomic, :warning], node.position)
end

#check_nonatomic(orig_node, risk_node) ⇒ Object



22
23
24
25
26
27
28
29
30
# File 'lib/jruby/lint/checkers/nonatomic.rb', line 22

def check_nonatomic(orig_node, risk_node)
  case risk_node
  when org::jruby::ast::LocalVarNode,
       org::jruby::ast::DVarNode
    # ok...mostly-safe cases
  else
    add_finding(collector, orig_node)
  end
end

#visitOpAsgnAndNode(node) ⇒ Object



10
11
12
# File 'lib/jruby/lint/checkers/nonatomic.rb', line 10

def visitOpAsgnAndNode(node)
  check_nonatomic(node, node.first_node)
end

#visitOpAsgnNode(node) ⇒ Object



18
19
20
# File 'lib/jruby/lint/checkers/nonatomic.rb', line 18

def visitOpAsgnNode(node)
  check_nonatomic(node, node.receiver_node)
end

#visitOpAsgnOrNode(node) ⇒ Object



6
7
8
# File 'lib/jruby/lint/checkers/nonatomic.rb', line 6

def visitOpAsgnOrNode(node)
  check_nonatomic(node, node.first_node)
end

#visitOpElementAsgnNode(node) ⇒ Object



14
15
16
# File 'lib/jruby/lint/checkers/nonatomic.rb', line 14

def visitOpElementAsgnNode(node)
  add_finding(collector, node)
end