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



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

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

.callbacksObject



90
91
92
# File 'lib/code_analyzer/checker.rb', line 90

def callbacks
  @callbacks ||= {}
end

.get_callbacks(name) ⇒ Object



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

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

.interesting_files(*file_patterns) ⇒ Object



73
74
75
76
# File 'lib/code_analyzer/checker.rb', line 73

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

.interesting_nodes(*nodes) ⇒ Object



68
69
70
71
# File 'lib/code_analyzer/checker.rb', line 68

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



53
54
55
56
57
58
59
60
# File 'lib/code_analyzer/checker.rb', line 53

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.



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

def interesting_files
  self.class.interesting_files
end

#interesting_nodesObject

interesting nodes that the check will parse.



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

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
45
46
# 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 do |block|
    self.instance_exec(node, &block)
  end
end

#node_start(node) ⇒ Object

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

start_call
start_def

Parameters:



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

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.



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

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

#warningsObject

all warnings.



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

def warnings
  @warnings ||= []
end