roodi 3.0.1 → 3.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2eb90b5c384b0916cd61ec2cf8f5a8f950458f23
4
- data.tar.gz: 76875cad67471324e5017ea7dd82e28c49307ba6
3
+ metadata.gz: 5fe93f143f769ff54f5113a656f2069c9e608070
4
+ data.tar.gz: e816fefa85c0c9294d8e2370eb7cd5f9715f8c02
5
5
  SHA512:
6
- metadata.gz: b68ac64dba9440ef8088cce40aaf71e4a3e2af8b7d9315255191cda7d786ca591862c13a319c5b109cc32c93f05eb17b81a4c3ef42b94962cfb9d31bbc6f92ee
7
- data.tar.gz: 57ca381da9ccd33455286ec37a7a0798010ccc744ebba90f23668187470eae1a6d9d28181fcb1204450a59bfdfbae3bf4d5f402fe5b009c14438a6f16f8870c5
6
+ metadata.gz: 7c7142c98fcb6fffb1c48038118c46da45168d12f95eb9517b4b77e69b38e29c5aadeffdb01fb3679a837704323a312507542e2ec7806e2105f9927b987a5862
7
+ data.tar.gz: 9e8e8147ccc6d25e5a3866a2eb536122c6bfdec6c8b1a166047937e99618416c327f523c887e93a56390ce30ed7fb672e02f9bb75924a21df13119fd0ebba3dc
data/History.txt CHANGED
@@ -1,3 +1,8 @@
1
+ = 3.1.0
2
+ * Loosen ruby_parser version dependency (PR from Benjamin Fleischer)
3
+ * Files that can't be parsed are no longer silently skipped
4
+ * Empty rescue body check not failing when block contains empty arrays etc
5
+
1
6
  = 3.0.1
2
7
 
3
8
  * Added brief class level documentation on all checks
@@ -3,30 +3,19 @@ require 'roodi/checks/check'
3
3
  module Roodi
4
4
  module Checks
5
5
  # Checks the body of a rescue block to make sure it's not empty..
6
- #
6
+ #
7
7
  # When the body of a rescue block is empty, exceptions can get caught and swallowed without
8
8
  # any feedback to the user.
9
9
  class EmptyRescueBodyCheck < Check
10
- STATEMENT_NODES = [:fcall, :return, :attrasgn, :vcall, :nil, :call, :lasgn, :true, :false, :next]
11
-
10
+
12
11
  def interesting_nodes
13
12
  [:resbody]
14
13
  end
15
14
 
16
15
  def evaluate_start(node)
17
- add_error("Rescue block should not be empty.") unless has_statement?(node.children[1])
18
- end
19
-
20
- private
21
-
22
- def has_statement?(node)
23
- false unless node
24
- has_local_statement?(node) or node.children.any? { |child| has_statement?(child) } if node
16
+ add_error("Rescue block should not be empty.") if node.children[1].nil?
25
17
  end
26
18
 
27
- def has_local_statement?(node)
28
- STATEMENT_NODES.include?(node.node_type)
29
- end
30
19
  end
31
20
  end
32
21
  end
@@ -16,14 +16,6 @@ module Roodi
16
16
 
17
17
  def count_lines(node)
18
18
  node.last.respond_to?(:line) ? node.last.line - node.line : 0
19
-
20
- rescue NoMethodError => e
21
- #TODO: Add spec for this, nothing breaks when removing it.
22
- if ENV['DEBUG'] =~ /true/i
23
- STDERR.puts "!! line counting error #{e.message}\t #{node.inspect}"
24
- STDERR.puts "!! Does the node have any lines?"
25
- end
26
- 0
27
19
  end
28
20
 
29
21
  end
@@ -52,6 +52,7 @@ module Roodi
52
52
  @checks ||= []
53
53
  all_errors = @checks.collect {|check| check.errors}
54
54
  all_errors.flatten
55
+ all_errors.flatten + parsing_errors
55
56
  end
56
57
 
57
58
  private
@@ -60,11 +61,15 @@ module Roodi
60
61
  begin
61
62
  Parser.new.parse(content, filename)
62
63
  rescue Exception => e
63
- puts "#{filename} looks like it's not a valid Ruby file. Skipping..." if ENV["ROODI_DEBUG"]
64
+ parsing_errors << "#{filename} looks like it's not a valid Ruby file."
64
65
  nil
65
66
  end
66
67
  end
67
68
 
69
+ def parsing_errors
70
+ @parsing_errors ||= []
71
+ end
72
+
68
73
  def load_checks
69
74
  check_objects = []
70
75
  checks = YAML.load_file @config
data/lib/roodi/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Roodi
2
- VERSION = '3.0.1'
2
+ VERSION = '3.1.0'
3
3
  end
data/roodi.gemspec CHANGED
@@ -8,16 +8,16 @@ Gem::Specification.new do |gem|
8
8
  gem.description = "Roodi parses your Ruby code and warns you about design issues you have based on the checks that is has configured"
9
9
  gem.homepage = "http://github.com/roodi/roodi"
10
10
  gem.authors = ["Marty Andrews", "Peter Evjan"]
11
- gem.email = "peter.evjan@gmail.com"
11
+ gem.email = "hello@peterevjan.com"
12
12
  gem.files = Dir['lib/**/*.rb'] + Dir['bin/*'] + Dir['[A-Za-z]*'] + Dir['spec/**/*']
13
13
  gem.version = Roodi::VERSION.dup
14
14
  gem.platform = Gem::Platform::RUBY
15
- gem.add_runtime_dependency("ruby_parser", "~> 3.2.2")
15
+ gem.add_runtime_dependency("ruby_parser", [">= 3.2.2", "~> 3.2"])
16
16
  gem.executables = ["roodi", "roodi-describe"]
17
- gem.files = `git ls-files`.split($\)
18
- gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
19
- gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.files = `git ls-files`.split($\)
18
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
19
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
20
20
  gem.require_paths = ["lib"]
21
- gem.license = 'MIT'
21
+ gem.license = 'MIT'
22
22
 
23
23
  end
@@ -4,7 +4,7 @@ describe Roodi::Checks::ClassLineCountCheck do
4
4
  before(:each) do
5
5
  @roodi = Roodi::Core::Runner.new(Roodi::Checks::ClassLineCountCheck.make({'line_count' => 1}))
6
6
  end
7
-
7
+
8
8
  it "should accept classes with less lines than the threshold" do
9
9
  content = <<-END
10
10
  class ZeroLineClass
@@ -16,7 +16,7 @@ describe Roodi::Checks::ClassLineCountCheck do
16
16
 
17
17
  it "should accept classes with the same number of lines as the threshold" do
18
18
  content = <<-END
19
- Class OneLineClass
19
+ class OneLineClass
20
20
  @foo = 1
21
21
  end
22
22
  END
@@ -4,7 +4,7 @@ describe Roodi::Checks::EmptyRescueBodyCheck do
4
4
  before(:each) do
5
5
  @roodi = Roodi::Core::Runner.new(Roodi::Checks::EmptyRescueBodyCheck.make)
6
6
  end
7
-
7
+
8
8
  it "should accept a rescue body with content and no parameter" do
9
9
  content = <<-END
10
10
  begin
@@ -151,4 +151,62 @@ describe Roodi::Checks::EmptyRescueBodyCheck do
151
151
  errors.should be_empty
152
152
  end
153
153
 
154
+ it "should accept a rescue block that has only an empty array" do
155
+ content = <<-END
156
+ begin
157
+ @path.dirname.children
158
+ rescue Errno::ENOENT
159
+ []
160
+ end
161
+ END
162
+ @roodi.check_content(content)
163
+ errors = @roodi.errors
164
+ errors.should be_empty
165
+ end
166
+
167
+ it "should accept a rescue block that has only the argument passed to the method" do
168
+ content = <<-END
169
+ def method_name(text)
170
+ begin
171
+ processed_text = text.some.processing.on.it
172
+ rescue
173
+ text
174
+ end
175
+ end
176
+ END
177
+
178
+ @roodi.check_content(content)
179
+ errors = @roodi.errors
180
+ errors.should be_empty
181
+ end
182
+
183
+ it "should accept a rescue block without a starting begin block" do
184
+ content = <<-RUBY
185
+ def process_text(text)
186
+ processed_text = text.some.processing.on.it
187
+ rescue
188
+ text
189
+ end
190
+ RUBY
191
+
192
+ @roodi.check_content(content)
193
+ errors = @roodi.errors
194
+ errors.should be_empty
195
+ end
196
+
197
+ it "should reject a rescue block that only contains a comment" do
198
+ content = <<-END
199
+ begin
200
+ @path.dirname.children
201
+ rescue Errno::ENOENT
202
+ # Comment
203
+ end
204
+ END
205
+
206
+ @roodi.check_content(content)
207
+ errors = @roodi.errors
208
+ errors.should_not be_empty
209
+ errors[0].to_s.should match(/dummy-file.rb:[5] - Rescue block should not be empty./)
210
+ end
211
+
154
212
  end
@@ -4,7 +4,7 @@ describe Roodi::Checks::MethodNameCheck do
4
4
  before(:each) do
5
5
  @roodi = Roodi::Core::Runner.new(Roodi::Checks::MethodNameCheck.make)
6
6
  end
7
-
7
+
8
8
  it "should accept method names with underscores" do
9
9
  content = <<-END
10
10
  def good_method_name
@@ -40,7 +40,7 @@ describe Roodi::Checks::MethodNameCheck do
40
40
  @roodi.check_content(content)
41
41
  @roodi.errors.should be_empty
42
42
  end
43
-
43
+
44
44
  it "should accept method names ending an equals sign" do
45
45
  content = <<-END
46
46
  def good_method_name=
@@ -51,7 +51,7 @@ describe Roodi::Checks::MethodNameCheck do
51
51
  end
52
52
 
53
53
  describe "when processing non-text based method names" do
54
- ['<<', '>>', '==', '=', '<', '<=', '>', '>=', '[]', '[]='].each do |each|
54
+ ['<<', '>>', '==', '<', '<=', '>', '>=', '[]', '[]='].each do |each|
55
55
  it "should accept #{each} as a method name" do
56
56
  content = <<-END
57
57
  def #{each}
@@ -1,15 +1,14 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
2
 
3
3
  describe Roodi::Core::Runner do
4
-
4
+ subject { Roodi::Core::Runner.new }
5
+
5
6
  describe "given a custom config file" do
6
7
  before do
7
- @runner = Roodi::Core::Runner.new
8
- @runner.config= File.expand_path(File.dirname(__FILE__) + '/../roodi.yml')
8
+ subject.config= File.expand_path(File.dirname(__FILE__) + '/../roodi.yml')
9
9
  end
10
-
10
+
11
11
  it "uses check from it" do
12
- # @runner.check_file(File.expand_path(File.dirname(__FILE__) + '/../fixtures/test_class.rb'))
13
12
  content = <<-RUBY
14
13
  class TestClass
15
14
 
@@ -18,8 +17,21 @@ describe Roodi::Core::Runner do
18
17
  end
19
18
  end
20
19
  RUBY
21
- @runner.check_content(content)
22
- @runner.errors.should be_empty
20
+ subject.check_content(content)
21
+ subject.errors.should be_empty
22
+ end
23
+ end
24
+
25
+ describe "running against a file" do
26
+ it "adds an error if file is not valid ruby" do
27
+ content = <<-END
28
+ <html>
29
+ </html>
30
+ END
31
+ subject.check_content(content)
32
+ expect(subject.errors).to_not be_empty
33
+ expect(subject.errors[0]).to eq "dummy-file.rb looks like it's not a valid Ruby file."
23
34
  end
24
35
  end
25
- end
36
+
37
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roodi
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.1
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marty Andrews
@@ -9,25 +9,31 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-08-16 00:00:00.000000000 Z
12
+ date: 2013-08-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ruby_parser
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - ~>
18
+ - - '>='
19
19
  - !ruby/object:Gem::Version
20
20
  version: 3.2.2
21
+ - - ~>
22
+ - !ruby/object:Gem::Version
23
+ version: '3.2'
21
24
  type: :runtime
22
25
  prerelease: false
23
26
  version_requirements: !ruby/object:Gem::Requirement
24
27
  requirements:
25
- - - ~>
28
+ - - '>='
26
29
  - !ruby/object:Gem::Version
27
30
  version: 3.2.2
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '3.2'
28
34
  description: Roodi parses your Ruby code and warns you about design issues you have
29
35
  based on the checks that is has configured
30
- email: peter.evjan@gmail.com
36
+ email: hello@peterevjan.com
31
37
  executables:
32
38
  - roodi
33
39
  - roodi-describe