Class: CodeAnalyzer::Checker

Inherits:
Object
  • Object
show all
Defined in:
lib/code_analyzer/checker.rb

Overview

A checker class that takes charge of checking the sexp.

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.add_callback(*names, &block) ⇒ Object



76
77
78
79
80
81
# File 'lib/code_analyzer/checker.rb', line 76

def add_callback(*names, &block)
  names.each do |name|
    callbacks[name] ||= []
    callbacks[name] << block
  end
end

.callbacksObject



83
84
85
# File 'lib/code_analyzer/checker.rb', line 83

def callbacks
  @callbacks ||= {}
end

.get_callbacks(name) ⇒ Object



71
72
73
74
# File 'lib/code_analyzer/checker.rb', line 71

def get_callbacks(name)
  callbacks[name] ||= []
  callbacks[name]
end

.interesting_files(*file_patterns) ⇒ Object



66
67
68
69
# File 'lib/code_analyzer/checker.rb', line 66

def interesting_files(*file_patterns)
  @interesting_files ||= []
  @interesting_files += file_patterns
end

.interesting_nodes(*nodes) ⇒ Object



61
62
63
64
# File 'lib/code_analyzer/checker.rb', line 61

def interesting_nodes(*nodes)
  @interesting_nodes ||= []
  @interesting_nodes += nodes
end

Instance Method Details

#add_warning(message, filename = @node.file, line_number = @node.line_number) ⇒ Object

add an warning.

Parameters:

  • message, (String)

    is the warning message

  • filename, (String)

    is the filename of source code

  • line_number, (Integer)

    is the line number of the source code which is reviewing



51
52
53
# File 'lib/code_analyzer/checker.rb', line 51

def add_warning(message, filename = @node.file, line_number = @node.line_number)
  warnings << Warning.new(filename: filename, line_number: line_number, message: message)
end

#interesting_filesObject

interesting files that the check will parse.



12
13
14
# File 'lib/code_analyzer/checker.rb', line 12

def interesting_files
  self.class.interesting_files
end

#interesting_nodesObject

interesting nodes that the check will parse.



7
8
9
# File 'lib/code_analyzer/checker.rb', line 7

def interesting_nodes
  self.class.interesting_nodes
end

#node_end(node) ⇒ Object

delegate to end_### according to the sexp_type, like

end_call
end_def

Parameters:



41
42
43
44
# File 'lib/code_analyzer/checker.rb', line 41

def node_end(node)
  @node = node
  self.class.get_callbacks("end_#{node.sexp_type}".to_sym).each { |block| self.instance_exec(node, &block) }
end

#node_start(node) ⇒ Object

delegate to start_### according to the sexp_type, like

start_call
start_def

Parameters:



30
31
32
33
# File 'lib/code_analyzer/checker.rb', line 30

def node_start(node)
  @node = node
  self.class.get_callbacks("start_#{node.sexp_type}".to_sym).each { |block| self.instance_exec(node, &block) }
end

#parse_file?(node_file) ⇒ Boolean

check if the checker will parse the node file.

Parameters:

  • the (String)

    file name of node.

Returns:

  • (Boolean)

    true if the checker will parse the file.



20
21
22
# File 'lib/code_analyzer/checker.rb', line 20

def parse_file?(node_file)
  interesting_files.any? { |pattern| node_file =~ pattern }
end

#warningsObject

all warnings.



56
57
58
# File 'lib/code_analyzer/checker.rb', line 56

def warnings
  @warnings ||= []
end