class JRuby::Lint::Checkers::System

Public Instance Methods

add_finding(node) click to toggle source
# File lib/jruby/lint/checkers/system.rb, line 22
def add_finding(node)
  collector.add_finding("Calling Kernel.system('ruby ...') will get called in-process.  Sometimes this works differently than expected",
                                    [:system, :warning], node.line+1)
end
red_flag?(node) click to toggle source

Defines red_flag when argument matches ruby

# File lib/jruby/lint/checkers/system.rb, line 28
def red_flag?(node)
  first_arg = node.args_node.child_nodes.first
  first_arg && first_arg.node_type.to_s == "STRNODE" && ruby_executable?(first_arg)
end
ruby_executable?(node) click to toggle source
# File lib/jruby/lint/checkers/system.rb, line 33
def ruby_executable?(node)
  match_on = Regexp.union([/.*ruby$/i, /.*j?irb$/i, /\.rb$/i])
  node.value.split.first =~ match_on
end
visitCallNode(node) click to toggle source

Make sure to follow all Kernel.system calls

# File lib/jruby/lint/checkers/system.rb, line 7
def visitCallNode(node)
  if node.name == :system || node.name == :'`'
    @call_node = node
    add_finding(node) if red_flag?(node)
    proc { @call_node = nil }
  end
end
visitFCallNode(node) click to toggle source

Visits the function calls for system

# File lib/jruby/lint/checkers/system.rb, line 16
def visitFCallNode(node)
  if node.name == :system
    add_finding(node) if red_flag?(node)
  end
end