class CodeAnalyzer::CheckingVisitor::Default
This is the default checking visitor to check ruby sexp nodes.
Public Class Methods
new(options = {})
click to toggle source
Calls superclass method
CodeAnalyzer::CheckingVisitor::Base::new
# File lib/code_analyzer/checking_visitor/default.rb, line 6 def initialize(options = {}) super @checks = {} @checkers.each do |checker| checker.interesting_nodes.each do |node| @checks[node] ||= [] @checks[node] << checker @checks[node].uniq! end end end
Public Instance Methods
after_check()
click to toggle source
trigger all after_check
callbacks defined in all checkers.
# File lib/code_analyzer/checking_visitor/default.rb, line 29 def after_check @checkers.each do |checker| after_check_callbacks = checker.class.get_callbacks(:after_check) after_check_callbacks.each { |block| checker.instance_exec &block } end end
check(filename, content)
click to toggle source
check the ruby sexp nodes for the ruby file.
@param [String] filename is the filename of ruby code. @param [String] content is the content of ruby file.
# File lib/code_analyzer/checking_visitor/default.rb, line 22 def check(filename, content) node = parse(filename, content) node.file = filename check_node(node) end
check_node(node)
click to toggle source
recursively check ruby sexp node.
-
it triggers the interesting checkers' start callbacks.
-
recursively check the sexp children.
-
it triggers the interesting checkers' end callbacks.
# File lib/code_analyzer/checking_visitor/default.rb, line 51 def check_node(node) checkers = @checks[node.sexp_type] checkers.each { |checker| checker.node_start(node) if checker.parse_file?(node.file) } if checkers node.children.each do |child_node| child_node.file = node.file check_node(child_node) end checkers.each { |checker| checker.node_end(node) if checker.parse_file?(node.file) } if checkers end
parse(filename, content)
click to toggle source
parse ruby code.
@param [String] filename is the filename of ruby code. @param [String] content is the content of ruby file.
# File lib/code_analyzer/checking_visitor/default.rb, line 40 def parse(filename, content) Sexp.from_array(Ripper::SexpBuilder.new(content).parse) rescue Exception raise AnalyzerException.new("#{filename} looks like it's not a valid Ruby file. Skipping...") end