guideline 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/bin/guideline +3 -2
- data/lib/guideline.rb +5 -3
- data/lib/guideline/checkers/abc_complexity_checker.rb +2 -34
- data/lib/guideline/checkers/trailing_whitespace_checker.rb +15 -0
- data/lib/guideline/checkers/unused_method_checker.rb +27 -5
- data/lib/guideline/parser/moduleable.rb +35 -0
- data/lib/guideline/version.rb +1 -1
- data/spec/guideline/checkers/trailing_whitespace_checker_spec.rb +41 -0
- data/spec/guideline/checkers/unused_method_checker_spec.rb +38 -0
- metadata +49 -18
- data/spec/guideline_spec.rb +0 -4
data/bin/guideline
CHANGED
@@ -9,11 +9,12 @@ options = Runner.parse(ARGV)
|
|
9
9
|
checkers = CheckerFactory.new(
|
10
10
|
options[:config],
|
11
11
|
AbcComplexityChecker,
|
12
|
-
|
12
|
+
HardTabIndentChecker,
|
13
13
|
HashCommaChecker,
|
14
14
|
LongLineChecker,
|
15
15
|
LongMethodChecker,
|
16
|
-
|
16
|
+
TrailingWhitespaceChecker,
|
17
|
+
UnusedMethodChecker,
|
17
18
|
).create
|
18
19
|
|
19
20
|
visitor = Visitor.new(:only => ARGV[0], :checker => checkers)
|
data/lib/guideline.rb
CHANGED
@@ -2,11 +2,13 @@ require "guideline/version"
|
|
2
2
|
require "guideline/visitor"
|
3
3
|
require "guideline/error"
|
4
4
|
require "guideline/runner"
|
5
|
+
require "guideline/parser/moduleable"
|
5
6
|
require "guideline/checker_factory"
|
6
7
|
require "guideline/checkers/checker"
|
7
|
-
require "guideline/checkers/
|
8
|
-
require "guideline/checkers/long_method_checker"
|
8
|
+
require "guideline/checkers/abc_complexity_checker"
|
9
9
|
require "guideline/checkers/hard_tab_indent_checker"
|
10
10
|
require "guideline/checkers/hash_comma_checker"
|
11
|
+
require "guideline/checkers/long_line_checker"
|
12
|
+
require "guideline/checkers/long_method_checker"
|
13
|
+
require "guideline/checkers/trailing_whitespace_checker"
|
11
14
|
require "guideline/checkers/unused_method_checker"
|
12
|
-
require "guideline/checkers/abc_complexity_checker"
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require "
|
1
|
+
require "code_analyzer"
|
2
2
|
|
3
3
|
module Guideline
|
4
4
|
class AbcComplexityChecker < Checker
|
@@ -36,38 +36,6 @@ module Guideline
|
|
36
36
|
@options[:max]
|
37
37
|
end
|
38
38
|
|
39
|
-
module Moduleable
|
40
|
-
def self.included(base)
|
41
|
-
base.class_eval do
|
42
|
-
interesting_nodes :class, :module
|
43
|
-
|
44
|
-
add_callback :start_class do |node|
|
45
|
-
modules << node.class_name.to_s
|
46
|
-
end
|
47
|
-
|
48
|
-
add_callback :start_module do |node|
|
49
|
-
modules << node.module_name.to_s
|
50
|
-
end
|
51
|
-
|
52
|
-
add_callback :end_class do |node|
|
53
|
-
modules.pop
|
54
|
-
end
|
55
|
-
|
56
|
-
add_callback :end_module do |node|
|
57
|
-
modules.pop
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def current_module_name
|
63
|
-
modules.join("::")
|
64
|
-
end
|
65
|
-
|
66
|
-
def modules
|
67
|
-
@moduels ||= []
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
39
|
class AbcParser < CodeAnalyzer::Checker
|
72
40
|
ASSIGNMENT_NODES = [:assign, :opassign]
|
73
41
|
BRANCH_NODES = [:call, :fcall, :vcall, :zsuper, :yield0, :brace_block, :do_block]
|
@@ -75,7 +43,7 @@ module Guideline
|
|
75
43
|
CONDITION_TOKENS = [:==, :===, :"<>", :<=, :>=, :=~, :>, :<, :<=>]
|
76
44
|
ALL_NODES = ASSIGNMENT_NODES + BRANCH_NODES + CONDITION_NODES
|
77
45
|
|
78
|
-
include Moduleable
|
46
|
+
include Parser::Moduleable
|
79
47
|
|
80
48
|
attr_reader :assignment, :branch, :condition
|
81
49
|
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Guideline
|
2
|
+
class TrailingWhitespaceChecker < Checker
|
3
|
+
def check(path)
|
4
|
+
path.each_line.with_index do |line, index|
|
5
|
+
if line =~ / $/
|
6
|
+
report(
|
7
|
+
:message => "Remove trailing whitespace",
|
8
|
+
:path => path,
|
9
|
+
:line => index + 1
|
10
|
+
)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -49,9 +49,13 @@ module Guideline
|
|
49
49
|
def report_unused_methods(path)
|
50
50
|
unused_methods.each do |method|
|
51
51
|
report(
|
52
|
-
:message => "Remove unused method <#{method.name}>",
|
53
52
|
:path => path,
|
54
|
-
:line => method.line
|
53
|
+
:line => method.line,
|
54
|
+
:message => "Remove unused method <%s%s%s>" % [
|
55
|
+
method.module_name,
|
56
|
+
method.class_method ? "." : "#",
|
57
|
+
method.name,
|
58
|
+
],
|
55
59
|
)
|
56
60
|
end
|
57
61
|
end
|
@@ -78,12 +82,30 @@ module Guideline
|
|
78
82
|
end
|
79
83
|
|
80
84
|
class MethodDefinitionChecker < MethodChecker
|
85
|
+
include Parser::Moduleable
|
86
|
+
|
81
87
|
interesting_files /.*\.rb/
|
82
|
-
interesting_nodes :def
|
88
|
+
interesting_nodes :def, :defs
|
83
89
|
|
84
90
|
add_callback :start_def do |node|
|
85
|
-
|
86
|
-
|
91
|
+
call(
|
92
|
+
Definition.new(
|
93
|
+
:line => node.line,
|
94
|
+
:name => node.method_name.to_s,
|
95
|
+
:module_name => current_module_name,
|
96
|
+
)
|
97
|
+
)
|
98
|
+
end
|
99
|
+
|
100
|
+
add_callback :start_defs do |node|
|
101
|
+
call(
|
102
|
+
Definition.new(
|
103
|
+
:line => node.line,
|
104
|
+
:name => node.method_name.to_s,
|
105
|
+
:module_name => current_module_name,
|
106
|
+
:class_method => true,
|
107
|
+
)
|
108
|
+
)
|
87
109
|
end
|
88
110
|
end
|
89
111
|
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Guideline
|
2
|
+
class Parser
|
3
|
+
module Moduleable
|
4
|
+
def self.included(base)
|
5
|
+
base.class_eval do
|
6
|
+
interesting_nodes :class, :module
|
7
|
+
|
8
|
+
add_callback :start_class do |node|
|
9
|
+
modules << node.class_name.to_s
|
10
|
+
end
|
11
|
+
|
12
|
+
add_callback :start_module do |node|
|
13
|
+
modules << node.module_name.to_s
|
14
|
+
end
|
15
|
+
|
16
|
+
add_callback :end_class do |node|
|
17
|
+
modules.pop
|
18
|
+
end
|
19
|
+
|
20
|
+
add_callback :end_module do |node|
|
21
|
+
modules.pop
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def current_module_name
|
27
|
+
modules.join("::")
|
28
|
+
end
|
29
|
+
|
30
|
+
def modules
|
31
|
+
@moduels ||= []
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/guideline/version.rb
CHANGED
@@ -0,0 +1,41 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module Guideline
|
4
|
+
describe TrailingWhitespaceChecker do
|
5
|
+
describe "#check" do
|
6
|
+
let(:checker) do
|
7
|
+
described_class.new
|
8
|
+
end
|
9
|
+
|
10
|
+
let(:path) do
|
11
|
+
mock(:each_line => script.each_line)
|
12
|
+
end
|
13
|
+
|
14
|
+
context "when there is trailing whitespace" do
|
15
|
+
let(:script) do
|
16
|
+
<<-EOF
|
17
|
+
1
|
18
|
+
EOF
|
19
|
+
end
|
20
|
+
|
21
|
+
it "detects error" do
|
22
|
+
checker.check(path)
|
23
|
+
checker.should have_error
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context "when there is no trailing whitespace" do
|
28
|
+
let(:script) do
|
29
|
+
<<-EOF
|
30
|
+
1
|
31
|
+
EOF
|
32
|
+
end
|
33
|
+
|
34
|
+
it "does not detect error" do
|
35
|
+
checker.check(path)
|
36
|
+
checker.should_not have_error
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -68,6 +68,44 @@ module Guideline
|
|
68
68
|
checker.check(path)
|
69
69
|
checker.send(:definitions).should be_empty
|
70
70
|
end
|
71
|
+
|
72
|
+
context "when there is unused instance method" do
|
73
|
+
let(:script) do
|
74
|
+
<<-EOF
|
75
|
+
class A
|
76
|
+
def c
|
77
|
+
1
|
78
|
+
end
|
79
|
+
end
|
80
|
+
EOF
|
81
|
+
end
|
82
|
+
|
83
|
+
it "reports it as instance method" do
|
84
|
+
checker.should_receive(:report) do |args|
|
85
|
+
args[:message].should include("A#c")
|
86
|
+
end
|
87
|
+
checker.check(path)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
context "when there is unused class method" do
|
92
|
+
let(:script) do
|
93
|
+
<<-EOF
|
94
|
+
class A
|
95
|
+
def self.c
|
96
|
+
1
|
97
|
+
end
|
98
|
+
end
|
99
|
+
EOF
|
100
|
+
end
|
101
|
+
|
102
|
+
it "reports it as class method" do
|
103
|
+
checker.should_receive(:report) do |args|
|
104
|
+
args[:message].should include("A.c")
|
105
|
+
end
|
106
|
+
checker.check(path)
|
107
|
+
end
|
108
|
+
end
|
71
109
|
end
|
72
110
|
end
|
73
111
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: guideline
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
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-12-
|
12
|
+
date: 2012-12-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: slop
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: code_analyzer
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ! '>='
|
@@ -32,10 +37,15 @@ dependencies:
|
|
32
37
|
version: '0'
|
33
38
|
type: :runtime
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: activesupport
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ! '>='
|
@@ -43,10 +53,15 @@ dependencies:
|
|
43
53
|
version: '0'
|
44
54
|
type: :runtime
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
47
62
|
- !ruby/object:Gem::Dependency
|
48
63
|
name: rspec
|
49
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
50
65
|
none: false
|
51
66
|
requirements:
|
52
67
|
- - ! '>='
|
@@ -54,10 +69,15 @@ dependencies:
|
|
54
69
|
version: 2.12.0
|
55
70
|
type: :development
|
56
71
|
prerelease: false
|
57
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 2.12.0
|
58
78
|
- !ruby/object:Gem::Dependency
|
59
79
|
name: pry
|
60
|
-
requirement:
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
61
81
|
none: false
|
62
82
|
requirements:
|
63
83
|
- - ! '>='
|
@@ -65,10 +85,15 @@ dependencies:
|
|
65
85
|
version: '0'
|
66
86
|
type: :development
|
67
87
|
prerelease: false
|
68
|
-
version_requirements:
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
69
94
|
- !ruby/object:Gem::Dependency
|
70
95
|
name: simplecov
|
71
|
-
requirement:
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
72
97
|
none: false
|
73
98
|
requirements:
|
74
99
|
- - ! '>='
|
@@ -76,7 +101,12 @@ dependencies:
|
|
76
101
|
version: '0'
|
77
102
|
type: :development
|
78
103
|
prerelease: false
|
79
|
-
version_requirements:
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
80
110
|
description: Guideline.gem checks that your code is protectingthe rule of coding guideline
|
81
111
|
email:
|
82
112
|
- r7kamura@gmail.com
|
@@ -101,8 +131,10 @@ files:
|
|
101
131
|
- lib/guideline/checkers/hash_comma_checker.rb
|
102
132
|
- lib/guideline/checkers/long_line_checker.rb
|
103
133
|
- lib/guideline/checkers/long_method_checker.rb
|
134
|
+
- lib/guideline/checkers/trailing_whitespace_checker.rb
|
104
135
|
- lib/guideline/checkers/unused_method_checker.rb
|
105
136
|
- lib/guideline/error.rb
|
137
|
+
- lib/guideline/parser/moduleable.rb
|
106
138
|
- lib/guideline/runner.rb
|
107
139
|
- lib/guideline/version.rb
|
108
140
|
- lib/guideline/visitor.rb
|
@@ -113,11 +145,11 @@ files:
|
|
113
145
|
- spec/guideline/checkers/hash_comma_checker_spec.rb
|
114
146
|
- spec/guideline/checkers/long_line_checker_spec.rb
|
115
147
|
- spec/guideline/checkers/long_method_checker_spec.rb
|
148
|
+
- spec/guideline/checkers/trailing_whitespace_checker_spec.rb
|
116
149
|
- spec/guideline/checkers/unused_method_checker_spec.rb
|
117
150
|
- spec/guideline/error_spec.rb
|
118
151
|
- spec/guideline/runner_spec.rb
|
119
152
|
- spec/guideline/visitor_spec.rb
|
120
|
-
- spec/guideline_spec.rb
|
121
153
|
- spec/spec_helper.rb
|
122
154
|
homepage: https://github.com/r7kamura/guideline
|
123
155
|
licenses: []
|
@@ -139,7 +171,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
139
171
|
version: '0'
|
140
172
|
requirements: []
|
141
173
|
rubyforge_project:
|
142
|
-
rubygems_version: 1.8.
|
174
|
+
rubygems_version: 1.8.24
|
143
175
|
signing_key:
|
144
176
|
specification_version: 3
|
145
177
|
summary: The guideline of your code
|
@@ -151,10 +183,9 @@ test_files:
|
|
151
183
|
- spec/guideline/checkers/hash_comma_checker_spec.rb
|
152
184
|
- spec/guideline/checkers/long_line_checker_spec.rb
|
153
185
|
- spec/guideline/checkers/long_method_checker_spec.rb
|
186
|
+
- spec/guideline/checkers/trailing_whitespace_checker_spec.rb
|
154
187
|
- spec/guideline/checkers/unused_method_checker_spec.rb
|
155
188
|
- spec/guideline/error_spec.rb
|
156
189
|
- spec/guideline/runner_spec.rb
|
157
190
|
- spec/guideline/visitor_spec.rb
|
158
|
-
- spec/guideline_spec.rb
|
159
191
|
- spec/spec_helper.rb
|
160
|
-
has_rdoc:
|
data/spec/guideline_spec.rb
DELETED