kevinrutherford-reek 1.1.1 → 1.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,3 +1,9 @@
1
+ == 1.2.0 (In progress)
2
+
3
+ === Major Enhancements
4
+ * Switched from ParseTree to ruby_parser for source code parsing
5
+ * 'MyClass.should_not reek' now only possible if ParseTree gem installed
6
+
1
7
  == 1.1.1 2009-05-08
2
8
 
3
9
  === Minor enhancements
@@ -1,5 +1,4 @@
1
1
  require 'rubygems'
2
- require 'parse_tree'
3
2
  require 'sexp_processor'
4
3
  require 'reek/block_context'
5
4
  require 'reek/class_context'
@@ -22,10 +21,6 @@ module Reek
22
21
  return unifier.process(sexp[0])
23
22
  end
24
23
 
25
- def self.parse_tree_for(code) # :nodoc:
26
- unify(ParseTree.new.parse_tree_for_string(code))
27
- end
28
-
29
24
  # Creates a new Ruby code checker. Any smells discovered by
30
25
  # +check_source+ or +check_object+ will be stored in +report+.
31
26
  def initialize(report, smells, ctx = StopContext.new)
@@ -38,21 +33,6 @@ module Reek
38
33
  @require_empty = @warn_on_default = false
39
34
  end
40
35
 
41
- # Analyses the given Ruby source +code+ looking for smells.
42
- # Any smells found are saved in the +Report+ object that
43
- # was passed to this object's constructor.
44
- def check_source(code)
45
- check_parse_tree(CodeParser.parse_tree_for(code))
46
- end
47
-
48
- # Analyses the given Ruby object +obj+ looking for smells.
49
- # Any smells found are saved in the +Report+ object that
50
- # was passed to this object's constructor.
51
- def check_object(obj)
52
- sexp = CodeParser.unify(ParseTree.new.parse_tree(obj))
53
- check_parse_tree(sexp)
54
- end
55
-
56
36
  def process_default(exp)
57
37
  exp[0..-1].each { |sub| process(sub) if Array === sub }
58
38
  s(exp)
@@ -211,9 +191,5 @@ module Reek
211
191
  @element = @element.outer
212
192
  s(exp)
213
193
  end
214
-
215
- def check_parse_tree(sexp) # :nodoc:
216
- process(sexp)
217
- end
218
194
  end
219
195
  end
data/lib/reek/name.rb CHANGED
@@ -21,7 +21,7 @@ module Reek
21
21
 
22
22
  def self.resolve_string(str, context)
23
23
  return [context, new(str)] unless str =~ /::/
24
- resolve(ParseTree.new.parse_tree_for_string(str)[0], context)
24
+ resolve(RubyParser.new.parse(str), context)
25
25
  end
26
26
 
27
27
  def initialize(sym)
@@ -0,0 +1,45 @@
1
+ module Reek
2
+ class Source
3
+ #
4
+ # Factory method: creates a +Source+ from obj.
5
+ # The code is not parsed until +report+ is called.
6
+ # (This feature is only enabled if you have the ParseTree gem installed.)
7
+ #
8
+ def self.from_object(obj)
9
+ return ObjectSource.new(obj, obj.to_s)
10
+ end
11
+ end
12
+
13
+ class ObjectSource < Source # :nodoc:
14
+ def can_parse_objects?
15
+ return true if Object.const_defined?(:ParseTree)
16
+ begin
17
+ require 'parse_tree'
18
+ true
19
+ rescue LoadError
20
+ false
21
+ end
22
+ end
23
+
24
+ def check(parser) # :nodoc:
25
+ if can_parse_objects?
26
+ sexp = CodeParser.unify(ParseTree.new.parse_tree(@source))
27
+ parser.process(sexp)
28
+ else
29
+ throw ArgumentError.new('You must install the ParseTree gem to use this feature')
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ class Object
36
+ #
37
+ # Constructs a Source representing this object; the source can then be used
38
+ # to generate an abstract syntax tree for the object, which can in turn then
39
+ # be examined for code smells.
40
+ # (This feature is only enabled if you have the ParseTree gem installed.)
41
+ #
42
+ def to_source
43
+ Reek::Source.from_object(self)
44
+ end
45
+ end
data/lib/reek/source.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'reek/code_parser'
2
2
  require 'reek/report'
3
3
  require 'reek/smells/smells'
4
+ require 'ruby_parser'
4
5
 
5
6
  module Reek
6
7
 
@@ -12,14 +13,6 @@ module Reek
12
13
  #
13
14
  class Source
14
15
 
15
- #
16
- # Factory method: creates a +Source+ from obj.
17
- # The code is not parsed until +report+ is called.
18
- #
19
- def self.from_object(obj)
20
- return ObjectSource.new(obj, obj.to_s)
21
- end
22
-
23
16
  #
24
17
  # Factory method: creates a +Source+ object by reading Ruby code from
25
18
  # the +IO+ stream. The stream is consumed upto end-of-file, but the
@@ -73,7 +66,8 @@ module Reek
73
66
  end
74
67
 
75
68
  def check(parser) # :nodoc:
76
- parser.check_source(@source)
69
+ sexp = RubyParser.new.parse(@source, @desc)
70
+ parser.process(sexp)
77
71
  end
78
72
 
79
73
  #
@@ -128,13 +122,6 @@ module Reek
128
122
  ReportList.new(@sources)
129
123
  end
130
124
  end
131
-
132
- #
133
- # Represents an in-memory object that will be checked for smells.
134
- #
135
- class ObjectSource < Source
136
- def check(parser) # :nodoc:
137
- parser.check_object(@source)
138
- end
139
- end
140
125
  end
126
+
127
+ require 'reek/object_source'
data/lib/reek/spec.rb CHANGED
@@ -113,12 +113,6 @@ module Reek
113
113
  end
114
114
  end
115
115
 
116
- class Object
117
- def to_source
118
- Reek::Source.from_object(self)
119
- end
120
- end
121
-
122
116
  class File
123
117
  def to_source
124
118
  Reek::Source.from_f(self)
data/lib/reek.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  $:.unshift File.dirname(__FILE__)
2
2
 
3
3
  module Reek # :doc:
4
- VERSION = '1.1.1'
4
+ VERSION = '1.1.2'
5
5
  end
data/reek.gemspec CHANGED
@@ -2,18 +2,17 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{reek}
5
- s.version = "1.1.1"
5
+ s.version = "1.1.2"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Kevin Rutherford"]
9
- s.date = %q{2009-05-08}
9
+ s.date = %q{2009-05-18}
10
10
  s.default_executable = %q{reek}
11
11
  s.description = %q{Code smell detector for Ruby}
12
12
  s.email = ["kevin@rutherford-software.com"]
13
13
  s.executables = ["reek"]
14
14
  s.extra_rdoc_files = ["History.txt", "README.txt"]
15
- s.files = ["History.txt", "README.txt", "Rakefile", "bin/reek", "config/defaults.reek", "lib/reek.rb", "lib/reek/block_context.rb", "lib/reek/class_context.rb", "lib/reek/code_context.rb", "lib/reek/code_parser.rb", "lib/reek/exceptions.reek", "lib/reek/if_context.rb", "lib/reek/method_context.rb", "lib/reek/module_context.rb", "lib/reek/name.rb", "lib/reek/object_refs.rb", "lib/reek/options.rb", "lib/reek/rake_task.rb", "lib/reek/report.rb", "lib/reek/sexp_formatter.rb", "lib/reek/singleton_method_context.rb", "lib/reek/smell_warning.rb", "lib/reek/smells/control_couple.rb", "lib/reek/smells/duplication.rb", "lib/reek/smells/feature_envy.rb", "lib/reek/smells/large_class.rb", "lib/reek/smells/long_method.rb", "lib/reek/smells/long_parameter_list.rb", "lib/reek/smells/long_yield_list.rb", "lib/reek/smells/nested_iterators.rb", "lib/reek/smells/smell_detector.rb", "lib/reek/smells/smells.rb", "lib/reek/smells/uncommunicative_name.rb", "lib/reek/smells/utility_function.rb", "lib/reek/source.rb", "lib/reek/spec.rb", "lib/reek/stop_context.rb", "lib/reek/yield_call_context.rb", "reek.gemspec", "spec/reek/block_context_spec.rb", "spec/reek/class_context_spec.rb", "spec/reek/code_context_spec.rb", "spec/reek/code_parser_spec.rb", "spec/reek/config_spec.rb", "spec/reek/if_context_spec.rb", "spec/reek/method_context_spec.rb", "spec/reek/module_context_spec.rb", "spec/reek/name_spec.rb", "spec/reek/object_refs_spec.rb", "spec/reek/options_spec.rb", "spec/reek/report_spec.rb", "spec/reek/sexp_formatter_spec.rb", "spec/reek/singleton_method_context_spec.rb", "spec/reek/smells/control_couple_spec.rb", "spec/reek/smells/duplication_spec.rb", "spec/reek/smells/feature_envy_spec.rb", "spec/reek/smells/large_class_spec.rb", "spec/reek/smells/long_method_spec.rb", "spec/reek/smells/long_parameter_list_spec.rb", "spec/reek/smells/nested_iterators_spec.rb", "spec/reek/smells/smell_spec.rb", "spec/reek/smells/uncommunicative_name_spec.rb", "spec/reek/smells/utility_function_spec.rb", "spec/slow/inline_spec.rb", "spec/slow/optparse_spec.rb", "spec/slow/redcloth_spec.rb", "spec/slow/reek_source_spec.rb", "spec/slow/samples/inline.rb", "spec/slow/samples/optparse.rb", "spec/slow/samples/redcloth.rb", "spec/slow/script_spec.rb", "spec/slow/source_list_spec.rb", "spec/spec.opts", "spec/spec_helper.rb", "tasks/reek.rake", "tasks/rspec.rake"]
16
- s.has_rdoc = true
15
+ s.files = ["History.txt", "README.txt", "Rakefile", "bin/reek", "config/defaults.reek", "lib/reek.rb", "lib/reek/block_context.rb", "lib/reek/class_context.rb", "lib/reek/code_context.rb", "lib/reek/code_parser.rb", "lib/reek/exceptions.reek", "lib/reek/if_context.rb", "lib/reek/method_context.rb", "lib/reek/module_context.rb", "lib/reek/name.rb", "lib/reek/object_refs.rb", "lib/reek/object_source.rb", "lib/reek/options.rb", "lib/reek/rake_task.rb", "lib/reek/report.rb", "lib/reek/sexp_formatter.rb", "lib/reek/singleton_method_context.rb", "lib/reek/smell_warning.rb", "lib/reek/smells/control_couple.rb", "lib/reek/smells/duplication.rb", "lib/reek/smells/feature_envy.rb", "lib/reek/smells/large_class.rb", "lib/reek/smells/long_method.rb", "lib/reek/smells/long_parameter_list.rb", "lib/reek/smells/long_yield_list.rb", "lib/reek/smells/nested_iterators.rb", "lib/reek/smells/smell_detector.rb", "lib/reek/smells/smells.rb", "lib/reek/smells/uncommunicative_name.rb", "lib/reek/smells/utility_function.rb", "lib/reek/source.rb", "lib/reek/spec.rb", "lib/reek/stop_context.rb", "lib/reek/yield_call_context.rb", "reek.gemspec", "spec/reek/block_context_spec.rb", "spec/reek/class_context_spec.rb", "spec/reek/code_context_spec.rb", "spec/reek/code_parser_spec.rb", "spec/reek/config_spec.rb", "spec/reek/if_context_spec.rb", "spec/reek/method_context_spec.rb", "spec/reek/module_context_spec.rb", "spec/reek/name_spec.rb", "spec/reek/object_refs_spec.rb", "spec/reek/options_spec.rb", "spec/reek/report_spec.rb", "spec/reek/singleton_method_context_spec.rb", "spec/reek/smells/control_couple_spec.rb", "spec/reek/smells/duplication_spec.rb", "spec/reek/smells/feature_envy_spec.rb", "spec/reek/smells/large_class_spec.rb", "spec/reek/smells/long_method_spec.rb", "spec/reek/smells/long_parameter_list_spec.rb", "spec/reek/smells/nested_iterators_spec.rb", "spec/reek/smells/smell_spec.rb", "spec/reek/smells/uncommunicative_name_spec.rb", "spec/reek/smells/utility_function_spec.rb", "spec/slow/inline_spec.rb", "spec/slow/optparse_spec.rb", "spec/slow/redcloth_spec.rb", "spec/slow/reek_source_spec.rb", "spec/slow/samples/inline.rb", "spec/slow/samples/optparse.rb", "spec/slow/samples/redcloth.rb", "spec/slow/script_spec.rb", "spec/slow/source_list_spec.rb", "spec/spec.opts", "spec/spec_helper.rb", "tasks/reek.rake", "tasks/rspec.rake"]
17
16
  s.homepage = %q{http://wiki.github.com/kevinrutherford/reek}
18
17
  s.post_install_message = %q{
19
18
  For more information on reek, see http://wiki.github.com/kevinrutherford/reek
@@ -21,7 +20,7 @@ For more information on reek, see http://wiki.github.com/kevinrutherford/reek
21
20
  s.rdoc_options = ["--main", "README.txt"]
22
21
  s.require_paths = ["lib"]
23
22
  s.rubyforge_project = %q{reek}
24
- s.rubygems_version = %q{1.3.2}
23
+ s.rubygems_version = %q{1.3.3}
25
24
  s.summary = %q{Code smell detector for Ruby}
26
25
 
27
26
  if s.respond_to? :specification_version then
@@ -29,16 +28,16 @@ For more information on reek, see http://wiki.github.com/kevinrutherford/reek
29
28
  s.specification_version = 3
30
29
 
31
30
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
32
- s.add_runtime_dependency(%q<ParseTree>, ["~> 3.0"])
31
+ s.add_runtime_dependency(%q<ruby_parser>, ["~> 2.0"])
33
32
  s.add_runtime_dependency(%q<ruby2ruby>, ["~> 1.2"])
34
33
  s.add_runtime_dependency(%q<sexp_processor>, ["~> 3.0"])
35
34
  else
36
- s.add_dependency(%q<ParseTree>, ["~> 3.0"])
35
+ s.add_dependency(%q<ruby_parser>, ["~> 2.0"])
37
36
  s.add_dependency(%q<ruby2ruby>, ["~> 1.2"])
38
37
  s.add_dependency(%q<sexp_processor>, ["~> 3.0"])
39
38
  end
40
39
  else
41
- s.add_dependency(%q<ParseTree>, ["~> 3.0"])
40
+ s.add_dependency(%q<ruby_parser>, ["~> 2.0"])
42
41
  s.add_dependency(%q<ruby2ruby>, ["~> 1.2"])
43
42
  s.add_dependency(%q<sexp_processor>, ["~> 3.0"])
44
43
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kevinrutherford-reek
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Rutherford
@@ -9,18 +9,18 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-05-08 00:00:00 -07:00
12
+ date: 2009-05-18 00:00:00 -07:00
13
13
  default_executable: reek
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: ParseTree
16
+ name: ruby_parser
17
17
  type: :runtime
18
18
  version_requirement:
19
19
  version_requirements: !ruby/object:Gem::Requirement
20
20
  requirements:
21
21
  - - ~>
22
22
  - !ruby/object:Gem::Version
23
- version: "3.0"
23
+ version: "2.0"
24
24
  version:
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: ruby2ruby
@@ -69,6 +69,7 @@ files:
69
69
  - lib/reek/module_context.rb
70
70
  - lib/reek/name.rb
71
71
  - lib/reek/object_refs.rb
72
+ - lib/reek/object_source.rb
72
73
  - lib/reek/options.rb
73
74
  - lib/reek/rake_task.rb
74
75
  - lib/reek/report.rb
@@ -104,7 +105,6 @@ files:
104
105
  - spec/reek/object_refs_spec.rb
105
106
  - spec/reek/options_spec.rb
106
107
  - spec/reek/report_spec.rb
107
- - spec/reek/sexp_formatter_spec.rb
108
108
  - spec/reek/singleton_method_context_spec.rb
109
109
  - spec/reek/smells/control_couple_spec.rb
110
110
  - spec/reek/smells/duplication_spec.rb
@@ -129,7 +129,7 @@ files:
129
129
  - spec/spec_helper.rb
130
130
  - tasks/reek.rake
131
131
  - tasks/rspec.rake
132
- has_rdoc: true
132
+ has_rdoc: false
133
133
  homepage: http://wiki.github.com/kevinrutherford/reek
134
134
  post_install_message: |
135
135
 
@@ -1,32 +0,0 @@
1
- require File.dirname(__FILE__) + '/../spec_helper.rb'
2
-
3
- require 'reek/code_parser'
4
- require 'reek/sexp_formatter'
5
-
6
- include Reek
7
-
8
- def should_print(example)
9
- it "should format #{example} correctly" do
10
- sexp = CodeParser.parse_tree_for(example)
11
- SexpFormatter.format(sexp).should == example
12
- end
13
- end
14
-
15
- describe SexpFormatter do
16
- should_print 'self'
17
- should_print 'Alpha'
18
- should_print 'Alpha::Beta'
19
- should_print '@@fred'
20
- should_print '`ls`'
21
- should_print 'array[0]'
22
- should_print 'array[0, 1, 2]'
23
- should_print 'obj.method(arg1, arg2)'
24
- should_print 'obj.method'
25
- should_print '$1'
26
- should_print 'o = q.downcase'
27
- should_print 'true'
28
- should_print '"-#{q}xxx#{z.size}"'
29
- should_print '(0..5)'
30
- should_print '(0..temp)'
31
- should_print 'result[opt] = false'
32
- end