code_analyzer 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -19,7 +19,7 @@ Or install it yourself as:
19
19
 
20
20
  ## Usage
21
21
 
22
- TODO: I will write instructions later.
22
+ <http://flyerhzm.github.com/code_analyzer/>
23
23
 
24
24
  ## Contributing
25
25
 
@@ -1,3 +1,4 @@
1
+ # encoding: utf-8
1
2
  require "ripper"
2
3
  require "code_analyzer/version"
3
4
  require "code_analyzer/nil"
@@ -1,3 +1,4 @@
1
+ # encoding: utf-8
1
2
  module CodeAnalyzer
2
3
  class AnalyzerException < Exception; end
3
4
  end
@@ -55,6 +55,7 @@ module CodeAnalyzer
55
55
  warnings << Warning.new(filename: filename, line_number: line_number, message: message)
56
56
  end
57
57
 
58
+ # all warnings.
58
59
  def warnings
59
60
  @warnings ||= []
60
61
  end
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  module CodeAnalyzer
3
3
  module CheckingVisitor
4
+ autoload :Base, "code_analyzer/checking_visitor/base"
4
5
  autoload :Plain, "code_analyzer/checking_visitor/plain"
5
6
  autoload :Default, "code_analyzer/checking_visitor/default"
6
7
  end
@@ -0,0 +1,15 @@
1
+ # encoding: utf-8
2
+ module CodeAnalyzer::CheckingVisitor
3
+ # Base class for checking visitor.
4
+ class Base
5
+ def initialize(options={})
6
+ @checkers = options[:checkers]
7
+ end
8
+
9
+ def after_check; end
10
+
11
+ def warnings
12
+ @warnings ||= @checkers.map(&:warnings).flatten
13
+ end
14
+ end
15
+ end
@@ -1,9 +1,10 @@
1
1
  # encoding: utf-8
2
2
  module CodeAnalyzer::CheckingVisitor
3
- class Default
3
+ # This is the default checking visitor to check ruby sexp nodes.
4
+ class Default < Base
4
5
  def initialize(options={})
6
+ super
5
7
  @checks = {}
6
- @checkers = options[:checkers]
7
8
  @checkers.each do |checker|
8
9
  checker.interesting_nodes.each do |node|
9
10
  @checks[node] ||= []
@@ -11,14 +12,19 @@ module CodeAnalyzer::CheckingVisitor
11
12
  @checks[node].uniq!
12
13
  end
13
14
  end
14
- end
15
+ end
15
16
 
17
+ # check the ruby sexp nodes for the ruby file.
18
+ #
19
+ # @param [String] filename is the filename of ruby code.
20
+ # @param [String] content is the content of ruby file.
16
21
  def check(filename, content)
17
22
  node = parse(filename, content)
18
23
  node.file = filename
19
24
  check_node(node)
20
25
  end
21
26
 
27
+ # trigger all after_check callbacks defined in all checkers.
22
28
  def after_check
23
29
  @checkers.each do |checker|
24
30
  after_check_callbacks = checker.class.get_callbacks(:after_check)
@@ -30,14 +36,19 @@ module CodeAnalyzer::CheckingVisitor
30
36
 
31
37
  # parse ruby code.
32
38
  #
33
- # @param [String] filename is the filename of ruby file.
34
- # @param [String] content is the source code of ruby file.
39
+ # @param [String] filename is the filename of ruby code.
40
+ # @param [String] content is the content of ruby file.
35
41
  def parse(filename, content)
36
42
  Sexp.from_array(Ripper::SexpBuilder.new(content).parse)
37
43
  rescue Exception
38
44
  raise AnalyzerException.new("#{filename} looks like it's not a valid Ruby file. Skipping...")
39
45
  end
40
46
 
47
+ # recursively check ruby sexp node.
48
+ #
49
+ # 1. it triggers the interesting checkers' start callbacks.
50
+ # 2. recursively check the sexp children.
51
+ # 3. it triggers the interesting checkers' end callbacks.
41
52
  def check_node(node)
42
53
  checkers = @checks[node.sexp_type]
43
54
  if checkers
@@ -1,17 +1,15 @@
1
1
  # encoding: utf-8
2
2
  module CodeAnalyzer::CheckingVisitor
3
- class Plain
4
- def initialize(options={})
5
- @checkers = options[:checkers]
6
- end
7
-
3
+ # This is the checking visitor to check ruby plain code.
4
+ class Plain < Base
5
+ # check the ruby plain code.
6
+ #
7
+ # @param [String] filename is the filename of ruby code.
8
+ # @param [String] content is the content of ruby file.
8
9
  def check(filename, content)
9
10
  @checkers.each do |checker|
10
11
  checker.check(filename, content)
11
12
  end
12
13
  end
13
-
14
- def after_check
15
- end
16
14
  end
17
15
  end
@@ -1,3 +1,4 @@
1
+ # encoding: utf-8
1
2
  module CodeAnalyzer
2
- VERSION = "0.1.1"
3
+ VERSION = "0.2.0"
3
4
  end
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+
3
+ module CodeAnalyzer
4
+ module CheckingVisitor
5
+ describe Base do
6
+ it "should return all checkers' warnings" do
7
+ warning1 = Warning.new
8
+ checker1 = mock(:checker, warnings: [warning1])
9
+ warning2 = Warning.new
10
+ checker2 = mock(:checker, warnings: [warning2])
11
+ visitor = Base.new(checkers: [checker1, checker2])
12
+ visitor.warnings.should == [warning1, warning2]
13
+ end
14
+ end
15
+ end
16
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: code_analyzer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-17 00:00:00.000000000 Z
12
+ date: 2012-09-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sexp_processor
16
- requirement: &70274611483180 !ruby/object:Gem::Requirement
16
+ requirement: &70129984050860 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70274611483180
24
+ version_requirements: *70129984050860
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &70274611482560 !ruby/object:Gem::Requirement
27
+ requirement: &70129984046400 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70274611482560
35
+ version_requirements: *70129984046400
36
36
  description: a code analyzer tool which extracted from rails_best_practices, it helps
37
37
  you easily build your own code analyzer tool.
38
38
  email:
@@ -53,6 +53,7 @@ files:
53
53
  - lib/code_analyzer/analyzer_exception.rb
54
54
  - lib/code_analyzer/checker.rb
55
55
  - lib/code_analyzer/checking_visitor.rb
56
+ - lib/code_analyzer/checking_visitor/base.rb
56
57
  - lib/code_analyzer/checking_visitor/default.rb
57
58
  - lib/code_analyzer/checking_visitor/plain.rb
58
59
  - lib/code_analyzer/nil.rb
@@ -60,6 +61,7 @@ files:
60
61
  - lib/code_analyzer/version.rb
61
62
  - lib/code_analyzer/warning.rb
62
63
  - spec/code_analyzer/checker_spec.rb
64
+ - spec/code_analyzer/checking_visitor/base_spec.rb
63
65
  - spec/code_analyzer/checking_visitor/default_spec.rb
64
66
  - spec/code_analyzer/checking_visitor/plain_spec.rb
65
67
  - spec/code_analyzer/nil_spec.rb
@@ -92,6 +94,7 @@ specification_version: 3
92
94
  summary: a code analyzer helps you build your own code analyzer tool.
93
95
  test_files:
94
96
  - spec/code_analyzer/checker_spec.rb
97
+ - spec/code_analyzer/checking_visitor/base_spec.rb
95
98
  - spec/code_analyzer/checking_visitor/default_spec.rb
96
99
  - spec/code_analyzer/checking_visitor/plain_spec.rb
97
100
  - spec/code_analyzer/nil_spec.rb