excellent 1.6.0 → 1.7.0

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/History.txt CHANGED
@@ -1,4 +1,15 @@
1
1
  =======
2
+ = 1.7.0
3
+
4
+ * fixed issue #24
5
+ * updated ruby_parser and sexp_processor dependencies
6
+ * fixed some wrong line number reports
7
+
8
+ = 1.6.0
9
+
10
+ * added Gemfile
11
+ * internal refactoring/cleanups
12
+
2
13
  = 1.5.5
3
14
 
4
15
  * better option parsing in the executable, (thanks trans, http://github.com/trans)
@@ -21,10 +21,15 @@ module Simplabs
21
21
  super([Parsing::ClassContext], threshold)
22
22
  end
23
23
 
24
+ def evaluate(context)
25
+ line_count = context.line_count == 1 ? 1 : context.line_count + 1
26
+ add_warning(*warning_args(context, line_count)) unless line_count <= @threshold
27
+ end
28
+
24
29
  protected
25
30
 
26
- def warning_args(context) #:nodoc:
27
- [context, '{{class}} has {{count}} lines.', { :class => context.full_name, :count => context.line_count }]
31
+ def warning_args(context, line_count) #:nodoc:
32
+ [context, '{{class}} has {{count}} lines.', { :class => context.full_name, :count => line_count }]
28
33
  end
29
34
 
30
35
  end
@@ -22,7 +22,7 @@ module Simplabs
22
22
 
23
23
  def evaluate(context) #:nodoc:
24
24
  if tested_parameter = context.tests_parameter?
25
- add_warning(context, '{{method}} is coupled to {{argument}}.', { :method => context.parent.full_name, :argument => tested_parameter.to_s }, -2)
25
+ add_warning(context, '{{method}} is coupled to {{argument}}.', { :method => context.parent.full_name, :argument => tested_parameter.to_s })
26
26
  end
27
27
  end
28
28
 
@@ -24,7 +24,7 @@ module Simplabs
24
24
  protected
25
25
 
26
26
  def warning_args(context) #:nodoc:
27
- [context, '{{method}} has {{count}} lines.', { :method => context.full_name, :count => context.line_count }]
27
+ [context, '{{method}} has {{count}} lines.', { :method => context.full_name, :count => context.line_count + 1 }]
28
28
  end
29
29
 
30
30
  end
@@ -24,7 +24,7 @@ module Simplabs
24
24
  protected
25
25
 
26
26
  def warning_args(context) #:nodoc:
27
- [context, '{{module}} has {{count}} lines.', { :module => context.full_name, :count => context.line_count }]
27
+ [context, '{{module}} has {{count}} lines.', { :module => context.full_name, :count => context.line_count + 1 }]
28
28
  end
29
29
 
30
30
  end
@@ -23,7 +23,7 @@ module Simplabs
23
23
  end
24
24
 
25
25
  def evaluate(context) #:nodoc:
26
- add_warning(context, 'Instance variable {{variable}} used in partial.', { :variable => context.full_name }, -1)
26
+ add_warning(context, 'Instance variable {{variable}} used in partial.', { :variable => context.full_name }, RUBY_VERSION =~ /1\.9/ ? -1 : 0)
27
27
  end
28
28
 
29
29
  end
@@ -24,7 +24,7 @@ module Simplabs
24
24
  end
25
25
 
26
26
  def evaluate(context) #:nodoc:
27
- add_warning(context, 'Params hash used in view.', {}, -1) if (context.full_name == 'params')
27
+ add_warning(context, 'Params hash used in view.', {}, RUBY_VERSION =~ /1\.9/ ? -1 : 0) if (context.full_name == 'params')
28
28
  end
29
29
 
30
30
  end
@@ -24,7 +24,7 @@ module Simplabs
24
24
  end
25
25
 
26
26
  def evaluate(context) #:nodoc:
27
- add_warning(context, 'Session hash used in view.', {}, -1) if (context.full_name == 'session')
27
+ add_warning(context, 'Session hash used in view.', {}, RUBY_VERSION =~ /1\.9/ ? -1 : 0) if (context.full_name == 'session')
28
28
  end
29
29
 
30
30
  end
@@ -88,12 +88,24 @@ module Simplabs
88
88
  end
89
89
 
90
90
  def process_args(exp)
91
- exp[1..-1].each { |parameter| @contexts.last.parameters << parameter if parameter.is_a?(Symbol) }
91
+ exp[1..-1].each do |parameter|
92
+ case parameter
93
+ when Sexp
94
+ case parameter[0]
95
+ when :masgn
96
+ parameter[1..-1].each { |parameter| @contexts.last.parameters << parameter }
97
+ when :lasgn
98
+ @contexts.last.parameters << parameter[1]
99
+ end
100
+ when Symbol
101
+ @contexts.last.parameters << parameter if parameter.is_a?(Symbol)
102
+ end
103
+ end
92
104
  process_default(exp)
93
105
  end
94
106
 
95
107
  def process_masgn(exp)
96
- exp[1][1..-1].each { |parameter| @contexts.last.parameters << parameter[1] if parameter[1].is_a?(Symbol) } if @contexts.last.is_a?(BlockContext)
108
+ exp[1..-1].each { |parameter| @contexts.last.parameters << parameter[1] if parameter[1].is_a?(Symbol) } if @contexts.last.is_a?(BlockContext)
97
109
  process_default(exp)
98
110
  end
99
111
 
@@ -19,7 +19,7 @@ module Simplabs
19
19
  private
20
20
 
21
21
  def silent_parse(content, filename)
22
- @parser ||= RubyParser.new
22
+ @parser ||= RubyParser.for_current_ruby
23
23
  content = ::ERB.new(content, nil, '-').src if filename =~ /\.erb$/
24
24
  sexp = @parser.parse(content, filename)
25
25
  sexp
@@ -11,8 +11,10 @@ describe Simplabs::Excellent::Checks::CaseMissingElseCheck do
11
11
  it 'should accept case statements that do have an else clause' do
12
12
  code = <<-END
13
13
  case foo
14
- when "bar": "ok"
15
- else "good"
14
+ when "bar"
15
+ "ok"
16
+ else
17
+ "good"
16
18
  end
17
19
  END
18
20
  @excellent.check_code(code)
@@ -24,8 +26,10 @@ describe Simplabs::Excellent::Checks::CaseMissingElseCheck do
24
26
  it 'should reject case statements that do not have an else clause' do
25
27
  code = <<-END
26
28
  case foo
27
- when "bar": "ok"
28
- when "bar": "bad"
29
+ when "bar"
30
+ "ok"
31
+ when "bar"
32
+ "bad"
29
33
  end
30
34
  END
31
35
  @excellent.check_code(code)
@@ -33,7 +37,7 @@ describe Simplabs::Excellent::Checks::CaseMissingElseCheck do
33
37
 
34
38
  warnings.should_not be_empty
35
39
  warnings[0].info.should == {}
36
- warnings[0].line_number.should == 2
40
+ warnings[0].line_number.should == 1
37
41
  warnings[0].message.should == 'Case statement is missing else clause.'
38
42
  end
39
43
 
@@ -58,7 +58,7 @@ describe Simplabs::Excellent::Checks::ControlCouplingCheck do
58
58
  end
59
59
  END
60
60
 
61
- verify_warning_found(code)
61
+ verify_warning_found(code, 2)
62
62
  end
63
63
 
64
64
  end
@@ -70,7 +70,7 @@ describe Simplabs::Excellent::Checks::ControlCouplingCheck do
70
70
  end
71
71
  END
72
72
 
73
- verify_warning_found(code)
73
+ verify_warning_found(code, 3) # this should actually be line 2
74
74
  end
75
75
 
76
76
  it "should reject methods with case statements using a parameter" do
@@ -85,18 +85,18 @@ describe Simplabs::Excellent::Checks::ControlCouplingCheck do
85
85
  end
86
86
  END
87
87
 
88
- verify_warning_found(code)
88
+ verify_warning_found(code, 2)
89
89
  end
90
90
 
91
91
  end
92
92
 
93
- def verify_warning_found(code)
93
+ def verify_warning_found(code, line)
94
94
  @excellent.check_code(code)
95
95
  warnings = @excellent.warnings
96
96
 
97
97
  warnings.should_not be_empty
98
98
  warnings[0].info.should == { :method => 'write', :argument => 'quoted' }
99
- warnings[0].line_number.should == 1
99
+ warnings[0].line_number.should == line
100
100
  warnings[0].message.should == 'write is coupled to quoted.'
101
101
  end
102
102
 
@@ -17,7 +17,7 @@ describe Simplabs::Excellent::Checks::SingletonVariableCheck do
17
17
 
18
18
  warnings.should_not be_empty
19
19
  warnings[0].info.should == { :variable => 'foo' }
20
- warnings[0].line_number.should == 2
20
+ warnings[0].line_number.should == 1
21
21
  warnings[0].message.should == 'Singleton variable foo used.'
22
22
  end
23
23
 
@@ -36,7 +36,7 @@ describe Simplabs::Excellent::Checks::SingletonVariableCheck do
36
36
 
37
37
  warnings.should_not be_empty
38
38
  warnings[0].info.should == { :variable => 'Outer::Inner::Class.foo' }
39
- warnings[0].line_number.should == 5
39
+ warnings[0].line_number.should == 4
40
40
  warnings[0].message.should == 'Singleton variable Outer::Inner::Class.foo used.'
41
41
  end
42
42
 
@@ -57,7 +57,7 @@ describe Simplabs::Excellent::Checks::SingletonVariableCheck do
57
57
 
58
58
  warnings.should_not be_empty
59
59
  warnings[0].info.should == { :variable => 'Outer::Inner::Class.foo' }
60
- warnings[0].line_number.should == 6
60
+ warnings[0].line_number.should == 5
61
61
  warnings[0].message.should == 'Singleton variable Outer::Inner::Class.foo used.'
62
62
  end
63
63
 
metadata CHANGED
@@ -1,45 +1,61 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: excellent
3
- version: !ruby/object:Gem::Version
4
- version: 1.6.0
3
+ version: !ruby/object:Gem::Version
4
+ hash: 11
5
5
  prerelease:
6
+ segments:
7
+ - 1
8
+ - 7
9
+ - 0
10
+ version: 1.7.0
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Marco Otte-Witte
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2009-08-05 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
17
+
18
+ date: 2009-08-05 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
15
21
  name: ruby_parser
16
- requirement: &70159583025320 !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
17
24
  none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '2.0'
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 7
29
+ segments:
30
+ - 3
31
+ - 0
32
+ version: "3.0"
22
33
  type: :runtime
23
- prerelease: false
24
- version_requirements: *70159583025320
25
- - !ruby/object:Gem::Dependency
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
26
36
  name: sexp_processor
27
- requirement: &70159583024300 !ruby/object:Gem::Requirement
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
28
39
  none: false
29
- requirements:
30
- - - ! '>='
31
- - !ruby/object:Gem::Version
32
- version: '3.0'
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 27
44
+ segments:
45
+ - 4
46
+ - 0
47
+ version: "4.0"
33
48
  type: :runtime
34
- prerelease: false
35
- version_requirements: *70159583024300
49
+ version_requirements: *id002
36
50
  description:
37
51
  email: marco.otte-witte@simplabs.com
38
- executables:
52
+ executables:
39
53
  - excellent
40
54
  extensions: []
55
+
41
56
  extra_rdoc_files: []
42
- files:
57
+
58
+ files:
43
59
  - History.txt
44
60
  - README.rdoc
45
61
  - VERSION.yml
@@ -149,28 +165,37 @@ files:
149
165
  - spec/spec_helper.rb
150
166
  homepage: http://github.com/simplabs/excellent
151
167
  licenses: []
168
+
152
169
  post_install_message:
153
- rdoc_options:
170
+ rdoc_options:
154
171
  - --inline-source
155
172
  - --charset=UTF-8
156
- require_paths:
173
+ require_paths:
157
174
  - lib
158
- required_ruby_version: !ruby/object:Gem::Requirement
175
+ required_ruby_version: !ruby/object:Gem::Requirement
159
176
  none: false
160
- requirements:
161
- - - ! '>='
162
- - !ruby/object:Gem::Version
163
- version: '0'
164
- required_rubygems_version: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ hash: 3
181
+ segments:
182
+ - 0
183
+ version: "0"
184
+ required_rubygems_version: !ruby/object:Gem::Requirement
165
185
  none: false
166
- requirements:
167
- - - ! '>='
168
- - !ruby/object:Gem::Version
169
- version: '0'
186
+ requirements:
187
+ - - ">="
188
+ - !ruby/object:Gem::Version
189
+ hash: 3
190
+ segments:
191
+ - 0
192
+ version: "0"
170
193
  requirements: []
194
+
171
195
  rubyforge_project:
172
- rubygems_version: 1.8.11
196
+ rubygems_version: 1.8.15
173
197
  signing_key:
174
198
  specification_version: 2
175
199
  summary: Source Code analysis gem for Ruby and Rails
176
200
  test_files: []
201
+