reek 1.0.0 → 1.1.3
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 +56 -22
- data/config/defaults.reek +3 -5
- data/lib/reek.rb +1 -1
- data/lib/reek/block_context.rb +27 -5
- data/lib/reek/class_context.rb +5 -9
- data/lib/reek/code_parser.rb +23 -50
- data/lib/reek/method_context.rb +18 -12
- data/lib/reek/module_context.rb +1 -1
- data/lib/reek/name.rb +8 -1
- data/lib/reek/object_refs.rb +2 -3
- data/lib/reek/object_source.rb +53 -0
- data/lib/reek/report.rb +41 -2
- data/lib/reek/sexp_formatter.rb +4 -46
- data/lib/reek/smells/large_class.rb +27 -8
- data/lib/reek/smells/long_parameter_list.rb +1 -1
- data/lib/reek/smells/smells.rb +4 -8
- data/lib/reek/source.rb +19 -8
- data/lib/reek/stop_context.rb +4 -16
- data/lib/reek/yield_call_context.rb +1 -3
- data/reek.gemspec +11 -9
- data/spec/reek/block_context_spec.rb +40 -0
- data/spec/reek/class_context_spec.rb +11 -40
- data/spec/reek/code_context_spec.rb +2 -1
- data/spec/reek/code_parser_spec.rb +0 -10
- data/spec/reek/config_spec.rb +2 -2
- data/spec/reek/method_context_spec.rb +14 -0
- data/spec/reek/name_spec.rb +13 -0
- data/spec/reek/object_refs_spec.rb +11 -9
- data/spec/reek/report_spec.rb +1 -1
- data/spec/reek/singleton_method_context_spec.rb +1 -1
- data/spec/reek/smells/duplication_spec.rb +2 -2
- data/spec/reek/smells/feature_envy_spec.rb +132 -36
- data/spec/reek/smells/large_class_spec.rb +48 -47
- data/spec/reek/smells/long_method_spec.rb +1 -1
- data/spec/reek/smells/long_parameter_list_spec.rb +4 -11
- data/spec/reek/smells/uncommunicative_name_spec.rb +6 -1
- data/spec/reek/smells/utility_function_spec.rb +6 -9
- data/spec/{samples → slow}/inline_spec.rb +13 -10
- data/spec/{samples → slow}/optparse_spec.rb +20 -12
- data/spec/{samples → slow}/redcloth_spec.rb +16 -8
- data/spec/{integration → slow}/reek_source_spec.rb +0 -0
- data/spec/{samples → slow/samples}/inline.rb +0 -0
- data/spec/{samples → slow/samples}/optparse.rb +0 -0
- data/spec/{samples → slow/samples}/redcloth.rb +0 -0
- data/spec/{integration → slow}/script_spec.rb +0 -0
- data/spec/slow/source_list_spec.rb +40 -0
- data/spec/spec_helper.rb +2 -0
- data/tasks/rspec.rake +1 -1
- metadata +30 -15
- data/spec/reek/sexp_formatter_spec.rb +0 -31
data/lib/reek/module_context.rb
CHANGED
data/lib/reek/name.rb
CHANGED
@@ -3,7 +3,9 @@ module Reek
|
|
3
3
|
include Comparable
|
4
4
|
|
5
5
|
def self.resolve(exp, context)
|
6
|
-
|
6
|
+
unless Array === exp
|
7
|
+
return resolve_string(exp.to_s, context)
|
8
|
+
end
|
7
9
|
name = exp[1]
|
8
10
|
case exp[0]
|
9
11
|
when :colon2
|
@@ -17,6 +19,11 @@ module Reek
|
|
17
19
|
end
|
18
20
|
end
|
19
21
|
|
22
|
+
def self.resolve_string(str, context)
|
23
|
+
return [context, new(str)] unless str =~ /::/
|
24
|
+
resolve(RubyParser.new.parse(str), context)
|
25
|
+
end
|
26
|
+
|
20
27
|
def initialize(sym)
|
21
28
|
@name = sym.to_s
|
22
29
|
end
|
data/lib/reek/object_refs.rb
CHANGED
@@ -6,7 +6,6 @@ module Reek
|
|
6
6
|
class ObjectRefs # :nodoc:
|
7
7
|
def initialize
|
8
8
|
@refs = Hash.new(0)
|
9
|
-
record_reference_to_self
|
10
9
|
end
|
11
10
|
|
12
11
|
def record_reference_to_self
|
@@ -34,8 +33,8 @@ module Reek
|
|
34
33
|
end
|
35
34
|
|
36
35
|
# TODO
|
37
|
-
# Should be moved to Hash
|
38
|
-
#
|
36
|
+
# Should be moved to Hash
|
37
|
+
#
|
39
38
|
def max_keys
|
40
39
|
max = max_refs
|
41
40
|
@refs.reject {|key,val| val != max}.keys
|
@@ -0,0 +1,53 @@
|
|
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
|
+
|
15
|
+
def self.unify(sexp) # :nodoc:
|
16
|
+
unifier = Unifier.new
|
17
|
+
unifier.processors.each do |proc|
|
18
|
+
proc.unsupported.delete :cfunc # HACK
|
19
|
+
end
|
20
|
+
return unifier.process(sexp[0])
|
21
|
+
end
|
22
|
+
|
23
|
+
def can_parse_objects?
|
24
|
+
return true if Object.const_defined?(:ParseTree)
|
25
|
+
begin
|
26
|
+
require 'parse_tree'
|
27
|
+
true
|
28
|
+
rescue LoadError
|
29
|
+
false
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def generate_syntax_tree
|
34
|
+
if can_parse_objects?
|
35
|
+
ObjectSource.unify(ParseTree.new.parse_tree(@source))
|
36
|
+
else
|
37
|
+
throw ArgumentError.new('You must install the ParseTree gem to use this feature')
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
class Object
|
44
|
+
#
|
45
|
+
# Constructs a Source representing this object; the source can then be used
|
46
|
+
# to generate an abstract syntax tree for the object, which can in turn then
|
47
|
+
# be examined for code smells.
|
48
|
+
# (This feature is only enabled if you have the ParseTree gem installed.)
|
49
|
+
#
|
50
|
+
def to_source
|
51
|
+
Reek::Source.from_object(self)
|
52
|
+
end
|
53
|
+
end
|
data/lib/reek/report.rb
CHANGED
@@ -9,6 +9,9 @@ module Reek
|
|
9
9
|
@report = SortedSet.new
|
10
10
|
end
|
11
11
|
|
12
|
+
#
|
13
|
+
# Yields, in turn, each SmellWarning in this report.
|
14
|
+
#
|
12
15
|
def each
|
13
16
|
@report.each { |smell| yield smell }
|
14
17
|
end
|
@@ -18,11 +21,11 @@ module Reek
|
|
18
21
|
true
|
19
22
|
end
|
20
23
|
|
21
|
-
def empty?
|
24
|
+
def empty?
|
22
25
|
@report.empty?
|
23
26
|
end
|
24
27
|
|
25
|
-
def length
|
28
|
+
def length
|
26
29
|
@report.length
|
27
30
|
end
|
28
31
|
|
@@ -32,6 +35,12 @@ module Reek
|
|
32
35
|
@report.to_a[index]
|
33
36
|
end
|
34
37
|
|
38
|
+
# Creates a formatted report of all the +Smells::SmellWarning+ objects recorded in
|
39
|
+
# this report, with a heading.
|
40
|
+
def full_report(desc)
|
41
|
+
"\"#{desc}\" -- #{length} warnings:\n#{to_s}\n"
|
42
|
+
end
|
43
|
+
|
35
44
|
# Creates a formatted report of all the +Smells::SmellWarning+ objects recorded in
|
36
45
|
# this report.
|
37
46
|
def to_s
|
@@ -39,4 +48,34 @@ module Reek
|
|
39
48
|
end
|
40
49
|
end
|
41
50
|
|
51
|
+
class ReportList
|
52
|
+
include Enumerable
|
53
|
+
|
54
|
+
def initialize(sources)
|
55
|
+
@sources = sources
|
56
|
+
end
|
57
|
+
|
58
|
+
#
|
59
|
+
# Yields, in turn, each SmellWarning in every report in this report.
|
60
|
+
#
|
61
|
+
def each(&blk)
|
62
|
+
@sources.each {|src| src.report.each(&blk) }
|
63
|
+
end
|
64
|
+
|
65
|
+
def empty?
|
66
|
+
length == 0
|
67
|
+
end
|
68
|
+
|
69
|
+
def length
|
70
|
+
@sources.inject(0) {|sum, src| sum + src.report.length }
|
71
|
+
end
|
72
|
+
|
73
|
+
def smelly_sources
|
74
|
+
@sources.select {|src| src.smelly? }
|
75
|
+
end
|
76
|
+
|
77
|
+
def to_s
|
78
|
+
smelly_sources.map { |src| src.full_report }.join("\n")
|
79
|
+
end
|
80
|
+
end
|
42
81
|
end
|
data/lib/reek/sexp_formatter.rb
CHANGED
@@ -1,52 +1,10 @@
|
|
1
|
+
require 'ruby2ruby'
|
2
|
+
|
1
3
|
module Reek
|
2
4
|
class SexpFormatter
|
3
5
|
def self.format(sexp)
|
4
|
-
|
5
|
-
|
6
|
-
case sexp[0]
|
7
|
-
when :array
|
8
|
-
format_all(sexp, ', ')
|
9
|
-
when :call
|
10
|
-
meth, args = sexp[2..3]
|
11
|
-
result = format(first)
|
12
|
-
if meth.to_s == '[]'
|
13
|
-
result += (args.nil? ? '[]' : "[#{format(args)}]")
|
14
|
-
else
|
15
|
-
result += ".#{meth}" + (args ? "(#{format(args)})" : '')
|
16
|
-
end
|
17
|
-
result
|
18
|
-
when :colon2
|
19
|
-
format_all(sexp, '::')
|
20
|
-
when :const, :cvar, :dvar
|
21
|
-
format(first)
|
22
|
-
when :dot2
|
23
|
-
format_all(sexp, '..')
|
24
|
-
when :dstr
|
25
|
-
'"' + format_all(sexp, '') + '"'
|
26
|
-
when :evstr
|
27
|
-
"\#\{#{format(first)}\}"
|
28
|
-
when :fcall, :vcall
|
29
|
-
args = sexp[2]
|
30
|
-
result = first.to_s
|
31
|
-
result += "(#{format(args)})" if args
|
32
|
-
result
|
33
|
-
when :iter
|
34
|
-
'block'
|
35
|
-
when :lasgn
|
36
|
-
format_all(sexp, '=')
|
37
|
-
when :nth_ref
|
38
|
-
"$#{first}"
|
39
|
-
when :str
|
40
|
-
first
|
41
|
-
when :xstr
|
42
|
-
"`#{first}`"
|
43
|
-
else
|
44
|
-
sexp[-1].to_s
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def self.format_all(sexp, glue)
|
49
|
-
sexp[1..-1].map {|arg| format(arg)}.join(glue)
|
6
|
+
sexp = YAML::load(YAML::dump(sexp))
|
7
|
+
Ruby2Ruby.new.process(sexp)
|
50
8
|
end
|
51
9
|
end
|
52
10
|
end
|
@@ -9,8 +9,9 @@ module Reek
|
|
9
9
|
# instance variables, methods or lines of code.
|
10
10
|
#
|
11
11
|
# Currently +LargeClass+ only reports classes having more than a
|
12
|
-
# configurable number of methods
|
13
|
-
#
|
12
|
+
# configurable number of methods or instance variables. The method count
|
13
|
+
# includes public, protected and
|
14
|
+
# private methods, and excludes methods inherited from superclasses or
|
14
15
|
# included modules.
|
15
16
|
#
|
16
17
|
class LargeClass < SmellDetector
|
@@ -19,6 +20,10 @@ module Reek
|
|
19
20
|
# permitted in a class.
|
20
21
|
MAX_ALLOWED_METHODS_KEY = 'max_methods'
|
21
22
|
|
23
|
+
# The name of the config field that sets the maximum number of instance
|
24
|
+
# variables permitted in a class.
|
25
|
+
MAX_ALLOWED_IVARS_KEY = 'max_instance_variables'
|
26
|
+
|
22
27
|
def self.contexts # :nodoc:
|
23
28
|
[:class]
|
24
29
|
end
|
@@ -26,24 +31,38 @@ module Reek
|
|
26
31
|
def self.default_config
|
27
32
|
super.adopt(
|
28
33
|
MAX_ALLOWED_METHODS_KEY => 25,
|
29
|
-
|
34
|
+
MAX_ALLOWED_IVARS_KEY => 9,
|
35
|
+
EXCLUDE_KEY => []
|
30
36
|
)
|
31
37
|
end
|
32
38
|
|
33
39
|
def initialize(config = LargeClass.default_config)
|
34
40
|
super
|
35
41
|
@max_methods = config[MAX_ALLOWED_METHODS_KEY]
|
42
|
+
@max_instance_variables = config[MAX_ALLOWED_IVARS_KEY]
|
43
|
+
end
|
44
|
+
|
45
|
+
def check_num_methods(klass, report) # :nodoc:
|
46
|
+
count = klass.num_methods
|
47
|
+
return if count <= @max_methods
|
48
|
+
report << SmellWarning.new(self, klass,
|
49
|
+
"has at least #{count} methods")
|
50
|
+
end
|
51
|
+
|
52
|
+
def check_num_ivars(klass, report) # :nodoc:
|
53
|
+
count = klass.variable_names.length
|
54
|
+
return if count <= @max_instance_variables
|
55
|
+
report << SmellWarning.new(self, klass,
|
56
|
+
"has at least #{count} instance variables")
|
36
57
|
end
|
37
58
|
|
38
59
|
#
|
39
|
-
# Checks
|
60
|
+
# Checks +klass+ for too many methods or too many instance variables.
|
40
61
|
# Any smells found are added to the +report+.
|
41
62
|
#
|
42
63
|
def examine_context(klass, report)
|
43
|
-
|
44
|
-
|
45
|
-
report << SmellWarning.new(self, klass,
|
46
|
-
"has at least #{num_methods} methods")
|
64
|
+
check_num_methods(klass, report)
|
65
|
+
check_num_ivars(klass, report)
|
47
66
|
end
|
48
67
|
end
|
49
68
|
end
|
data/lib/reek/smells/smells.rb
CHANGED
@@ -11,13 +11,10 @@ require 'reek/smells/utility_function'
|
|
11
11
|
require 'yaml'
|
12
12
|
|
13
13
|
class Hash
|
14
|
-
def
|
15
|
-
|
16
|
-
self[key].adopt!(other[key])
|
17
|
-
end
|
18
|
-
self
|
14
|
+
def push_keys(hash)
|
15
|
+
keys.each {|key| hash[key].adopt!(self[key]) }
|
19
16
|
end
|
20
|
-
|
17
|
+
|
21
18
|
def adopt!(other)
|
22
19
|
other.keys.each do |key|
|
23
20
|
ov = other[key]
|
@@ -69,8 +66,7 @@ module Reek
|
|
69
66
|
def load_local(file)
|
70
67
|
path = File.expand_path(file)
|
71
68
|
all_reekfiles(path).each do |rfile|
|
72
|
-
|
73
|
-
@config.value_merge!(cf)
|
69
|
+
YAML.load_file(rfile).push_keys(@config)
|
74
70
|
end
|
75
71
|
self
|
76
72
|
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
|
|
@@ -57,10 +58,15 @@ module Reek
|
|
57
58
|
SourceList.new(sources)
|
58
59
|
end
|
59
60
|
|
60
|
-
def initialize(code, desc, dir =
|
61
|
+
def initialize(code, desc, dir = nil) # :nodoc:
|
61
62
|
@source = code
|
62
|
-
@dir = dir
|
63
63
|
@desc = desc
|
64
|
+
@cf = SmellConfig.new
|
65
|
+
@cf = @cf.load_local(dir) if dir
|
66
|
+
end
|
67
|
+
|
68
|
+
def generate_syntax_tree
|
69
|
+
RubyParser.new.parse(@source, @desc) || s()
|
64
70
|
end
|
65
71
|
|
66
72
|
#
|
@@ -71,8 +77,8 @@ module Reek
|
|
71
77
|
def report
|
72
78
|
unless @report
|
73
79
|
@report = Report.new
|
74
|
-
|
75
|
-
|
80
|
+
parser = CodeParser.new(@report, @cf.smell_listeners)
|
81
|
+
parser.process(generate_syntax_tree)
|
76
82
|
end
|
77
83
|
@report
|
78
84
|
end
|
@@ -89,6 +95,12 @@ module Reek
|
|
89
95
|
report.any? { |smell| smell.matches?(smell_class, patterns) }
|
90
96
|
end
|
91
97
|
|
98
|
+
# Creates a formatted report of all the +Smells::SmellWarning+ objects recorded in
|
99
|
+
# this report, with a heading.
|
100
|
+
def full_report
|
101
|
+
report.full_report(@desc)
|
102
|
+
end
|
103
|
+
|
92
104
|
def to_s
|
93
105
|
@desc
|
94
106
|
end
|
@@ -107,10 +119,9 @@ module Reek
|
|
107
119
|
end
|
108
120
|
|
109
121
|
def report
|
110
|
-
@sources
|
111
|
-
warnings = src.report
|
112
|
-
"\"#{src}\" -- #{warnings.length} warnings:\n#{warnings.to_s}\n"
|
113
|
-
end.join("\n")
|
122
|
+
ReportList.new(@sources)
|
114
123
|
end
|
115
124
|
end
|
116
125
|
end
|
126
|
+
|
127
|
+
require 'reek/object_source'
|
data/lib/reek/stop_context.rb
CHANGED
@@ -5,6 +5,10 @@ module Reek
|
|
5
5
|
@refs = ObjectRefs.new
|
6
6
|
@myself = Object
|
7
7
|
end
|
8
|
+
def method_missing(method, *args)
|
9
|
+
nil
|
10
|
+
end
|
11
|
+
|
8
12
|
|
9
13
|
def count_statements(num)
|
10
14
|
0
|
@@ -39,22 +43,6 @@ module Reek
|
|
39
43
|
false
|
40
44
|
end
|
41
45
|
|
42
|
-
def record_call_to(exp)
|
43
|
-
nil
|
44
|
-
end
|
45
|
-
|
46
|
-
def record_method(name)
|
47
|
-
end
|
48
|
-
|
49
|
-
def record_parameter(sym)
|
50
|
-
end
|
51
|
-
|
52
|
-
def record_instance_variable(sym)
|
53
|
-
end
|
54
|
-
|
55
|
-
def record_local_variable(sym)
|
56
|
-
end
|
57
|
-
|
58
46
|
def outer_name
|
59
47
|
''
|
60
48
|
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 = "
|
5
|
+
s.version = "1.1.3"
|
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-
|
9
|
+
s.date = %q{2009-05-19}
|
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/
|
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,22 +20,25 @@ 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.
|
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
|
28
27
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
29
|
-
s.specification_version =
|
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<
|
31
|
+
s.add_runtime_dependency(%q<ruby_parser>, ["~> 2.0"])
|
32
|
+
s.add_runtime_dependency(%q<ruby2ruby>, ["~> 1.2"])
|
33
33
|
s.add_runtime_dependency(%q<sexp_processor>, ["~> 3.0"])
|
34
34
|
else
|
35
|
-
s.add_dependency(%q<
|
35
|
+
s.add_dependency(%q<ruby_parser>, ["~> 2.0"])
|
36
|
+
s.add_dependency(%q<ruby2ruby>, ["~> 1.2"])
|
36
37
|
s.add_dependency(%q<sexp_processor>, ["~> 3.0"])
|
37
38
|
end
|
38
39
|
else
|
39
|
-
s.add_dependency(%q<
|
40
|
+
s.add_dependency(%q<ruby_parser>, ["~> 2.0"])
|
41
|
+
s.add_dependency(%q<ruby2ruby>, ["~> 1.2"])
|
40
42
|
s.add_dependency(%q<sexp_processor>, ["~> 3.0"])
|
41
43
|
end
|
42
44
|
end
|