reek 2.2.1 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -1
- data/.travis.yml +9 -4
- data/CHANGELOG +8 -0
- data/Gemfile +6 -4
- data/README.md +6 -0
- data/docs/API.md +51 -22
- data/docs/Configuration-Files.md +12 -1
- data/docs/Feature-Envy.md +30 -10
- data/docs/How-reek-works-internally.md +109 -39
- data/docs/RSpec-matchers.md +26 -22
- data/docs/Reek-Driven-Development.md +0 -8
- data/docs/Utility-Function.md +8 -10
- data/features/{ruby_api/api.feature → command_line_interface/basic_usage.feature} +2 -2
- data/features/programmatic_access.feature +21 -2
- data/features/samples.feature +3 -1
- data/lib/reek.rb +2 -2
- data/lib/reek/{core → ast}/ast_node_class_map.rb +8 -8
- data/lib/reek/{sexp/sexp_node.rb → ast/node.rb} +47 -6
- data/lib/reek/{core → ast}/object_refs.rb +2 -1
- data/lib/reek/{core → ast}/reference_collector.rb +2 -1
- data/lib/reek/{sexp → ast}/sexp_extensions.rb +10 -5
- data/lib/reek/{sexp → ast}/sexp_formatter.rb +7 -5
- data/lib/reek/cli/application.rb +1 -0
- data/lib/reek/cli/command.rb +1 -0
- data/lib/reek/cli/input.rb +4 -1
- data/lib/reek/cli/option_interpreter.rb +6 -4
- data/lib/reek/cli/options.rb +2 -1
- data/lib/reek/cli/reek_command.rb +3 -2
- data/lib/reek/cli/silencer.rb +1 -0
- data/lib/reek/{core → cli}/warning_collector.rb +2 -1
- data/lib/reek/code_comment.rb +36 -0
- data/lib/reek/configuration/app_configuration.rb +17 -2
- data/lib/reek/configuration/configuration_file_finder.rb +1 -0
- data/lib/reek/{core → context}/code_context.rb +7 -5
- data/lib/reek/{core → context}/method_context.rb +5 -3
- data/lib/reek/{core → context}/module_context.rb +8 -3
- data/lib/reek/{core/stop_context.rb → context/root_context.rb} +4 -2
- data/lib/reek/{core → context}/singleton_method_context.rb +2 -1
- data/lib/reek/examiner.rb +82 -0
- data/lib/reek/report/formatter.rb +70 -0
- data/lib/reek/report/heading_formatter.rb +45 -0
- data/lib/reek/report/location_formatter.rb +35 -0
- data/lib/reek/report/report.rb +198 -0
- data/lib/reek/smells.rb +24 -13
- data/lib/reek/smells/attribute.rb +6 -4
- data/lib/reek/smells/boolean_parameter.rb +3 -1
- data/lib/reek/smells/class_variable.rb +3 -1
- data/lib/reek/smells/control_parameter.rb +3 -1
- data/lib/reek/smells/data_clump.rb +3 -1
- data/lib/reek/smells/duplicate_method_call.rb +3 -1
- data/lib/reek/smells/feature_envy.rb +3 -1
- data/lib/reek/smells/irresponsible_module.rb +12 -7
- data/lib/reek/smells/long_parameter_list.rb +5 -3
- data/lib/reek/smells/long_yield_list.rb +3 -1
- data/lib/reek/smells/module_initialize.rb +3 -1
- data/lib/reek/smells/nested_iterators.rb +3 -1
- data/lib/reek/smells/nil_check.rb +3 -1
- data/lib/reek/smells/prima_donna_method.rb +3 -1
- data/lib/reek/smells/repeated_conditional.rb +5 -3
- data/lib/reek/{core → smells}/smell_configuration.rb +3 -1
- data/lib/reek/smells/smell_detector.rb +9 -7
- data/lib/reek/{core → smells}/smell_repository.rb +3 -2
- data/lib/reek/smells/smell_warning.rb +6 -4
- data/lib/reek/smells/too_many_instance_variables.rb +3 -1
- data/lib/reek/smells/too_many_methods.rb +3 -1
- data/lib/reek/smells/too_many_statements.rb +3 -1
- data/lib/reek/smells/uncommunicative_method_name.rb +3 -1
- data/lib/reek/smells/uncommunicative_module_name.rb +3 -1
- data/lib/reek/smells/uncommunicative_parameter_name.rb +3 -1
- data/lib/reek/smells/uncommunicative_variable_name.rb +3 -1
- data/lib/reek/smells/unused_parameters.rb +3 -1
- data/lib/reek/smells/utility_function.rb +5 -2
- data/lib/reek/source/source_code.rb +40 -9
- data/lib/reek/source/source_locator.rb +30 -12
- data/lib/reek/spec/should_reek.rb +5 -4
- data/lib/reek/spec/should_reek_of.rb +3 -2
- data/lib/reek/spec/should_reek_only_of.rb +5 -4
- data/lib/reek/tree_dresser.rb +32 -0
- data/lib/reek/tree_walker.rb +182 -0
- data/lib/reek/version.rb +1 -1
- data/reek.gemspec +3 -3
- data/spec/factories/factories.rb +2 -0
- data/spec/reek/{sexp/sexp_node_spec.rb → ast/node_spec.rb} +2 -2
- data/spec/reek/{core → ast}/object_refs_spec.rb +3 -3
- data/spec/reek/{core → ast}/reference_collector_spec.rb +2 -2
- data/spec/reek/{sexp → ast}/sexp_extensions_spec.rb +6 -16
- data/spec/reek/{sexp → ast}/sexp_formatter_spec.rb +2 -2
- data/spec/reek/cli/option_interpreter_spec.rb +2 -1
- data/spec/reek/{core → cli}/warning_collector_spec.rb +3 -3
- data/spec/reek/{core/code_comment_spec.rb → code_comment_spec.rb} +3 -3
- data/spec/reek/configuration/app_configuration_spec.rb +31 -18
- data/spec/reek/{core → context}/code_context_spec.rb +14 -15
- data/spec/reek/{core → context}/method_context_spec.rb +8 -8
- data/spec/reek/{core → context}/module_context_spec.rb +4 -4
- data/spec/reek/context/root_context_spec.rb +14 -0
- data/spec/reek/{core → context}/singleton_method_context_spec.rb +4 -4
- data/spec/reek/{core/examiner_spec.rb → examiner_spec.rb} +3 -42
- data/spec/reek/{cli → report}/html_report_spec.rb +5 -5
- data/spec/reek/report/json_report_spec.rb +20 -0
- data/spec/reek/{cli → report}/text_report_spec.rb +14 -14
- data/spec/reek/{cli → report}/xml_report_spec.rb +7 -7
- data/spec/reek/report/yaml_report_spec.rb +20 -0
- data/spec/reek/smells/attribute_spec.rb +2 -1
- data/spec/reek/smells/boolean_parameter_spec.rb +1 -1
- data/spec/reek/smells/class_variable_spec.rb +5 -5
- data/spec/reek/smells/control_parameter_spec.rb +1 -1
- data/spec/reek/smells/data_clump_spec.rb +1 -1
- data/spec/reek/smells/duplicate_method_call_spec.rb +3 -3
- data/spec/reek/smells/feature_envy_spec.rb +1 -1
- data/spec/reek/smells/irresponsible_module_spec.rb +24 -28
- data/spec/reek/smells/long_parameter_list_spec.rb +2 -2
- data/spec/reek/smells/long_yield_list_spec.rb +2 -2
- data/spec/reek/smells/nested_iterators_spec.rb +1 -1
- data/spec/reek/smells/nil_check_spec.rb +2 -2
- data/spec/reek/smells/prima_donna_method_spec.rb +3 -3
- data/spec/reek/smells/repeated_conditional_spec.rb +6 -6
- data/spec/reek/{core → smells}/smell_configuration_spec.rb +4 -4
- data/spec/reek/smells/smell_detector_shared.rb +2 -2
- data/spec/reek/{core → smells}/smell_repository_spec.rb +5 -4
- data/spec/reek/smells/too_many_instance_variables_spec.rb +1 -1
- data/spec/reek/smells/too_many_methods_spec.rb +4 -4
- data/spec/reek/smells/too_many_statements_spec.rb +2 -2
- data/spec/reek/smells/uncommunicative_method_name_spec.rb +1 -1
- data/spec/reek/smells/uncommunicative_module_name_spec.rb +4 -4
- data/spec/reek/smells/uncommunicative_parameter_name_spec.rb +2 -2
- data/spec/reek/smells/uncommunicative_variable_name_spec.rb +3 -3
- data/spec/reek/smells/utility_function_spec.rb +23 -1
- data/spec/reek/source/source_code_spec.rb +1 -1
- data/spec/reek/source/source_locator_spec.rb +30 -0
- data/spec/reek/spec/should_reek_of_spec.rb +0 -17
- data/spec/reek/spec/should_reek_spec.rb +0 -25
- data/spec/reek/tree_dresser_spec.rb +16 -0
- data/spec/reek/{core/tree_walker_spec.rb → tree_walker_spec.rb} +5 -5
- data/spec/samples/{simple_configuration.reek → configuration/simple_configuration.reek} +0 -0
- data/spec/samples/configuration/with_excluded_paths.reek +4 -0
- data/spec/samples/source_with_exclude_paths/ignore_me/uncommunicative_method_name.rb +5 -0
- data/spec/samples/source_with_exclude_paths/nested/ignore_me_as_well/irresponsible_module.rb +2 -0
- data/spec/samples/source_with_exclude_paths/nested/uncommunicative_parameter_name.rb +6 -0
- data/spec/spec_helper.rb +6 -7
- data/tasks/develop.rake +2 -2
- metadata +71 -69
- data/lib/reek/cli/report/formatter.rb +0 -69
- data/lib/reek/cli/report/heading_formatter.rb +0 -45
- data/lib/reek/cli/report/location_formatter.rb +0 -34
- data/lib/reek/cli/report/report.rb +0 -191
- data/lib/reek/core/ast_node.rb +0 -38
- data/lib/reek/core/code_comment.rb +0 -37
- data/lib/reek/core/examiner.rb +0 -85
- data/lib/reek/core/tree_dresser.rb +0 -24
- data/lib/reek/core/tree_walker.rb +0 -180
- data/lib/reek/source/source_repository.rb +0 -43
- data/spec/reek/cli/json_report_spec.rb +0 -20
- data/spec/reek/cli/yaml_report_spec.rb +0 -20
- data/spec/reek/core/object_source_spec.rb +0 -18
- data/spec/reek/core/stop_context_spec.rb +0 -14
- data/spec/reek/core/tree_dresser_spec.rb +0 -16
@@ -1,13 +1,13 @@
|
|
1
1
|
require_relative '../../spec_helper'
|
2
|
-
require_relative '../../../lib/reek/
|
3
|
-
require_relative '../../../lib/reek/
|
4
|
-
require_relative '../../../lib/reek/
|
2
|
+
require_relative '../../../lib/reek/examiner'
|
3
|
+
require_relative '../../../lib/reek/report/report'
|
4
|
+
require_relative '../../../lib/reek/report/formatter'
|
5
5
|
|
6
|
-
RSpec.describe Reek::
|
7
|
-
let(:instance) { Reek::
|
6
|
+
RSpec.describe Reek::Report::XMLReport do
|
7
|
+
let(:instance) { Reek::Report::XMLReport.new }
|
8
8
|
|
9
9
|
context 'empty source' do
|
10
|
-
let(:examiner) { Reek::
|
10
|
+
let(:examiner) { Reek::Examiner.new('') }
|
11
11
|
|
12
12
|
before do
|
13
13
|
instance.add_examiner examiner
|
@@ -19,7 +19,7 @@ RSpec.describe Reek::CLI::Report::XMLReport do
|
|
19
19
|
end
|
20
20
|
|
21
21
|
context 'source with voliations' do
|
22
|
-
let(:examiner) { Reek::
|
22
|
+
let(:examiner) { Reek::Examiner.new('def simple(a) a[0] end') }
|
23
23
|
|
24
24
|
before do
|
25
25
|
allow(File).to receive(:realpath).and_return('/some/path')
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require_relative '../../spec_helper'
|
2
|
+
require_relative '../../../lib/reek/examiner'
|
3
|
+
require_relative '../../../lib/reek/report/report'
|
4
|
+
require_relative '../../../lib/reek/report/formatter'
|
5
|
+
|
6
|
+
RSpec.describe Reek::Report::YAMLReport do
|
7
|
+
let(:instance) { Reek::Report::YAMLReport.new }
|
8
|
+
|
9
|
+
context 'empty source' do
|
10
|
+
let(:examiner) { Reek::Examiner.new('') }
|
11
|
+
|
12
|
+
before do
|
13
|
+
instance.add_examiner examiner
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'prints empty yaml' do
|
17
|
+
expect { instance.show }.to output(/^--- \[\]\n.*$/).to_stdout
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -1,11 +1,12 @@
|
|
1
1
|
require_relative '../../spec_helper'
|
2
2
|
require_relative '../../../lib/reek/smells/attribute'
|
3
|
+
require_relative '../../../lib/reek/smells/smell_configuration'
|
3
4
|
require_relative 'smell_detector_shared'
|
4
5
|
|
5
6
|
RSpec.describe Reek::Smells::Attribute do
|
6
7
|
let(:config) do
|
7
8
|
{
|
8
|
-
Attribute: { Reek::
|
9
|
+
Attribute: { Reek::Smells::SmellConfiguration::ENABLED_KEY => true }
|
9
10
|
}
|
10
11
|
end
|
11
12
|
|
@@ -75,7 +75,7 @@ RSpec.describe Reek::Smells::BooleanParameter do
|
|
75
75
|
|
76
76
|
it 'reports the fields correctly' do
|
77
77
|
src = 'def cc(arga = true) end'
|
78
|
-
ctx = Reek::
|
78
|
+
ctx = Reek::Context::MethodContext.new(nil, Reek::Source::SourceCode.from(src).syntax_tree)
|
79
79
|
@detector.examine(ctx)
|
80
80
|
smells = @detector.smells_found.to_a
|
81
81
|
expect(smells.length).to eq(1)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require_relative '../../spec_helper'
|
2
2
|
require_relative '../../../lib/reek/smells/class_variable'
|
3
|
-
require_relative '../../../lib/reek/
|
3
|
+
require_relative '../../../lib/reek/context/module_context'
|
4
4
|
require_relative 'smell_detector_shared'
|
5
5
|
|
6
6
|
RSpec.describe Reek::Smells::ClassVariable do
|
@@ -15,12 +15,12 @@ RSpec.describe Reek::Smells::ClassVariable do
|
|
15
15
|
context 'with no class variables' do
|
16
16
|
it 'records nothing in the class' do
|
17
17
|
exp = ast(:class, :Fred)
|
18
|
-
expect(@detector.examine_context(Reek::
|
18
|
+
expect(@detector.examine_context(Reek::Context::CodeContext.new(nil, exp))).to be_empty
|
19
19
|
end
|
20
20
|
|
21
21
|
it 'records nothing in the module' do
|
22
22
|
exp = ast(:module, :Fred)
|
23
|
-
expect(@detector.examine_context(Reek::
|
23
|
+
expect(@detector.examine_context(Reek::Context::CodeContext.new(nil, exp))).to be_empty
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
@@ -28,7 +28,7 @@ RSpec.describe Reek::Smells::ClassVariable do
|
|
28
28
|
shared_examples_for 'one variable found' do
|
29
29
|
before :each do
|
30
30
|
ast = Reek::Source::SourceCode.from(@src).syntax_tree
|
31
|
-
@smells = @detector.examine_context(Reek::
|
31
|
+
@smells = @detector.examine_context(Reek::Context::CodeContext.new(nil, ast))
|
32
32
|
end
|
33
33
|
|
34
34
|
it 'records only that class variable' do
|
@@ -99,7 +99,7 @@ RSpec.describe Reek::Smells::ClassVariable do
|
|
99
99
|
#{@class_variable} = {}
|
100
100
|
end
|
101
101
|
EOS
|
102
|
-
ctx = Reek::
|
102
|
+
ctx = Reek::Context::CodeContext.new(nil, Reek::Source::SourceCode.from(src).syntax_tree)
|
103
103
|
@warning = @detector.examine_context(ctx)[0]
|
104
104
|
expect(@warning.source).to eq(@source_name)
|
105
105
|
expect(@warning.smell_category).to eq(described_class.smell_category)
|
@@ -272,7 +272,7 @@ RSpec.describe Reek::Smells::ControlParameter do
|
|
272
272
|
puts "hello" if arg
|
273
273
|
end
|
274
274
|
EOS
|
275
|
-
ctx = Reek::
|
275
|
+
ctx = Reek::Context::MethodContext.new(nil, Reek::Source::SourceCode.from(src).syntax_tree)
|
276
276
|
smells = @detector.examine(ctx)
|
277
277
|
expect(smells.length).to eq(1)
|
278
278
|
@warning = smells[0]
|
@@ -25,7 +25,7 @@ RSpec.shared_examples_for 'a data clump detector' do
|
|
25
25
|
def third(pa, pb) pa - pb + @fred; end
|
26
26
|
end
|
27
27
|
EOS
|
28
|
-
ctx = Reek::
|
28
|
+
ctx = Reek::Context::ModuleContext.new(nil, Reek::Source::SourceCode.from(@src).syntax_tree)
|
29
29
|
detector = build(:smell_detector, smell_type: :DataClump)
|
30
30
|
@smells = detector.examine_context(ctx)
|
31
31
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require_relative '../../spec_helper'
|
2
2
|
require_relative '../../../lib/reek/smells/duplicate_method_call'
|
3
|
-
require_relative '../../../lib/reek/
|
4
|
-
require_relative '../../../lib/reek/
|
3
|
+
require_relative '../../../lib/reek/context/code_context'
|
4
|
+
require_relative '../../../lib/reek/tree_walker'
|
5
5
|
require_relative 'smell_detector_shared'
|
6
6
|
|
7
7
|
RSpec.describe Reek::Smells::DuplicateMethodCall do
|
@@ -16,7 +16,7 @@ RSpec.describe Reek::Smells::DuplicateMethodCall do
|
|
16
16
|
other[@thing]
|
17
17
|
end
|
18
18
|
EOS
|
19
|
-
ctx = Reek::
|
19
|
+
ctx = Reek::Context::CodeContext.new(nil, Reek::Source::SourceCode.from(src).syntax_tree)
|
20
20
|
smells = @detector.examine_context(ctx)
|
21
21
|
expect(smells.length).to eq(1)
|
22
22
|
@warning = smells[0]
|
@@ -231,7 +231,7 @@ RSpec.describe Reek::Smells::FeatureEnvy do
|
|
231
231
|
end
|
232
232
|
EOS
|
233
233
|
source = Reek::Source::SourceCode.from(src)
|
234
|
-
@mctx = Reek::
|
234
|
+
@mctx = Reek::TreeWalker.new.process_def(source.syntax_tree)
|
235
235
|
@smells = @detector.examine_context(@mctx)
|
236
236
|
end
|
237
237
|
|
@@ -1,17 +1,9 @@
|
|
1
1
|
require_relative '../../spec_helper'
|
2
|
-
require_relative '../../../lib/reek/
|
2
|
+
require_relative '../../../lib/reek/context/code_context'
|
3
3
|
require_relative '../../../lib/reek/smells/irresponsible_module'
|
4
4
|
require_relative 'smell_detector_shared'
|
5
5
|
|
6
6
|
RSpec.describe Reek::Smells::IrresponsibleModule do
|
7
|
-
before(:each) do
|
8
|
-
@bad_module_name = 'WrongUn'
|
9
|
-
@source_name = 'dummy_source'
|
10
|
-
@detector = build(:smell_detector, smell_type: :IrresponsibleModule, source: @source_name)
|
11
|
-
end
|
12
|
-
|
13
|
-
it_should_behave_like 'SmellDetector'
|
14
|
-
|
15
7
|
it 'does not report re-opened modules' do
|
16
8
|
src = <<-EOS
|
17
9
|
# Abstract base class
|
@@ -27,19 +19,12 @@ RSpec.describe Reek::Smells::IrresponsibleModule do
|
|
27
19
|
# test class
|
28
20
|
class Responsible; end
|
29
21
|
EOS
|
30
|
-
|
31
|
-
expect(@detector.examine_context(ctx)).to be_empty
|
22
|
+
expect(src).not_to reek_of(:IrresponsibleModule)
|
32
23
|
end
|
33
24
|
|
34
25
|
it 'reports a class without a comment' do
|
35
|
-
src =
|
36
|
-
|
37
|
-
smells = @detector.examine_context(ctx)
|
38
|
-
expect(smells.length).to eq(1)
|
39
|
-
expect(smells[0].smell_category).to eq(Reek::Smells::IrresponsibleModule.smell_category)
|
40
|
-
expect(smells[0].smell_type).to eq(Reek::Smells::IrresponsibleModule.smell_type)
|
41
|
-
expect(smells[0].lines).to eq([1])
|
42
|
-
expect(smells[0].parameters[:name]).to eq(@bad_module_name)
|
26
|
+
src = 'class BadClass; end'
|
27
|
+
expect(src).to reek_of :IrresponsibleModule, name: 'BadClass'
|
43
28
|
end
|
44
29
|
|
45
30
|
it 'reports a class with an empty comment' do
|
@@ -47,7 +32,7 @@ RSpec.describe Reek::Smells::IrresponsibleModule do
|
|
47
32
|
#
|
48
33
|
#
|
49
34
|
#
|
50
|
-
class
|
35
|
+
class BadClass; end
|
51
36
|
EOS
|
52
37
|
expect(src).to reek_of :IrresponsibleModule
|
53
38
|
end
|
@@ -63,14 +48,25 @@ RSpec.describe Reek::Smells::IrresponsibleModule do
|
|
63
48
|
expect(src).to reek_of(:IrresponsibleModule)
|
64
49
|
end
|
65
50
|
|
66
|
-
it 'reports a
|
51
|
+
it 'reports a class with a trailing comment' do
|
52
|
+
src = <<-EOS
|
53
|
+
class BadClass
|
54
|
+
end # end BadClass
|
55
|
+
EOS
|
56
|
+
expect(src).to reek_of(:IrresponsibleModule)
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'reports a fully qualified class name correctly' do
|
67
60
|
src = 'class Foo::Bar; end'
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
61
|
+
expect(src).to reek_of :IrresponsibleModule, name: 'Foo::Bar'
|
62
|
+
end
|
63
|
+
|
64
|
+
context 'when a smell is reported' do
|
65
|
+
before do
|
66
|
+
@source_name = 'dummy_source'
|
67
|
+
@detector = build(:smell_detector, smell_type: :IrresponsibleModule, source: @source_name)
|
68
|
+
end
|
69
|
+
|
70
|
+
it_should_behave_like 'SmellDetector'
|
75
71
|
end
|
76
72
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
require_relative '../../spec_helper'
|
2
|
-
require_relative '../../../lib/reek/
|
2
|
+
require_relative '../../../lib/reek/context/code_context'
|
3
3
|
require_relative '../../../lib/reek/smells/long_parameter_list'
|
4
4
|
require_relative 'smell_detector_shared'
|
5
5
|
|
@@ -89,7 +89,7 @@ RSpec.describe Reek::Smells::LongParameterList do
|
|
89
89
|
true
|
90
90
|
end
|
91
91
|
EOS
|
92
|
-
ctx = Reek::
|
92
|
+
ctx = Reek::Context::CodeContext.new(nil, Reek::Source::SourceCode.from(src).syntax_tree)
|
93
93
|
@smells = @detector.examine_context(ctx)
|
94
94
|
@warning = @smells[0]
|
95
95
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
require_relative '../../spec_helper'
|
2
|
-
require_relative '../../../lib/reek/
|
2
|
+
require_relative '../../../lib/reek/context/code_context'
|
3
3
|
require_relative '../../../lib/reek/smells/long_yield_list'
|
4
4
|
require_relative 'smell_detector_shared'
|
5
5
|
|
@@ -38,7 +38,7 @@ RSpec.describe Reek::Smells::LongYieldList do
|
|
38
38
|
yield(arga,argb,arga,argb)
|
39
39
|
end
|
40
40
|
EOS
|
41
|
-
ctx = Reek::
|
41
|
+
ctx = Reek::Context::CodeContext.new(nil, Reek::Source::SourceCode.from(src).syntax_tree)
|
42
42
|
@smells = @detector.examine_context(ctx)
|
43
43
|
@warning = @smells[0]
|
44
44
|
end
|
@@ -237,7 +237,7 @@ RSpec.describe Reek::Smells::NestedIterators do
|
|
237
237
|
end
|
238
238
|
end
|
239
239
|
EOS
|
240
|
-
ctx = Reek::
|
240
|
+
ctx = Reek::Context::CodeContext.new(nil, Reek::Source::SourceCode.from(src).syntax_tree)
|
241
241
|
@warning = @detector.examine_context(ctx)[0]
|
242
242
|
end
|
243
243
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
require_relative '../../spec_helper'
|
2
|
-
require_relative '../../../lib/reek/
|
2
|
+
require_relative '../../../lib/reek/context/code_context'
|
3
3
|
require_relative '../../../lib/reek/smells/nil_check'
|
4
4
|
require_relative 'smell_detector_shared'
|
5
5
|
|
@@ -11,7 +11,7 @@ RSpec.describe Reek::Smells::NilCheck do
|
|
11
11
|
foo.nil?
|
12
12
|
end
|
13
13
|
EOS
|
14
|
-
ctx = Reek::
|
14
|
+
ctx = Reek::Context::CodeContext.new(nil, Reek::Source::SourceCode.from(src).syntax_tree)
|
15
15
|
detector = build(:smell_detector, smell_type: :NilCheck, source: 'source_name')
|
16
16
|
smells = detector.examine_context(ctx)
|
17
17
|
expect(smells[0].lines).to eq [2]
|
@@ -1,5 +1,5 @@
|
|
1
1
|
require_relative '../../spec_helper'
|
2
|
-
require_relative '../../../lib/reek/
|
2
|
+
require_relative '../../../lib/reek/context/module_context'
|
3
3
|
require_relative 'smell_detector_shared'
|
4
4
|
|
5
5
|
RSpec.describe Reek::Smells::PrimaDonnaMethod do
|
@@ -15,8 +15,8 @@ RSpec.describe Reek::Smells::PrimaDonnaMethod do
|
|
15
15
|
let(:detector) { build(:smell_detector, smell_type: :PrimaDonnaMethod, source: 'source_name') }
|
16
16
|
let(:src) { 'class C; def m!; end; end' }
|
17
17
|
let(:ctx) do
|
18
|
-
Reek::
|
19
|
-
|
18
|
+
Reek::Context::ModuleContext.new(nil,
|
19
|
+
Reek::Source::SourceCode.from(src).syntax_tree)
|
20
20
|
end
|
21
21
|
|
22
22
|
it 'should be reported' do
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require_relative '../../spec_helper'
|
2
2
|
require_relative '../../../lib/reek/smells/repeated_conditional'
|
3
|
-
require_relative '../../../lib/reek/
|
3
|
+
require_relative '../../../lib/reek/context/code_context'
|
4
4
|
require_relative 'smell_detector_shared'
|
5
5
|
require_relative '../../../lib/reek/source/source_code'
|
6
6
|
|
@@ -15,7 +15,7 @@ RSpec.describe Reek::Smells::RepeatedConditional do
|
|
15
15
|
context 'with no conditionals' do
|
16
16
|
it 'gathers an empty hash' do
|
17
17
|
ast = Reek::Source::SourceCode.from('module Stable; end').syntax_tree
|
18
|
-
ctx = Reek::
|
18
|
+
ctx = Reek::Context::CodeContext.new(nil, ast)
|
19
19
|
expect(@detector.conditional_counts(ctx).length).to eq(0)
|
20
20
|
end
|
21
21
|
end
|
@@ -23,7 +23,7 @@ RSpec.describe Reek::Smells::RepeatedConditional do
|
|
23
23
|
context 'with a test of block_given?' do
|
24
24
|
it 'does not record the condition' do
|
25
25
|
ast = Reek::Source::SourceCode.from('def fred() yield(3) if block_given?; end').syntax_tree
|
26
|
-
ctx = Reek::
|
26
|
+
ctx = Reek::Context::CodeContext.new(nil, ast)
|
27
27
|
expect(@detector.conditional_counts(ctx).length).to eq(0)
|
28
28
|
end
|
29
29
|
end
|
@@ -31,7 +31,7 @@ RSpec.describe Reek::Smells::RepeatedConditional do
|
|
31
31
|
context 'with an empty condition' do
|
32
32
|
it 'does not record the condition' do
|
33
33
|
ast = Reek::Source::SourceCode.from('def fred() case; when 3; end; end').syntax_tree
|
34
|
-
ctx = Reek::
|
34
|
+
ctx = Reek::Context::CodeContext.new(nil, ast)
|
35
35
|
expect(@detector.conditional_counts(ctx).length).to eq(0)
|
36
36
|
end
|
37
37
|
end
|
@@ -58,7 +58,7 @@ RSpec.describe Reek::Smells::RepeatedConditional do
|
|
58
58
|
EOS
|
59
59
|
|
60
60
|
ast = Reek::Source::SourceCode.from(src).syntax_tree
|
61
|
-
@ctx = Reek::
|
61
|
+
@ctx = Reek::Context::CodeContext.new(nil, ast)
|
62
62
|
@conds = @detector.conditional_counts(@ctx)
|
63
63
|
end
|
64
64
|
|
@@ -94,7 +94,7 @@ RSpec.describe Reek::Smells::RepeatedConditional do
|
|
94
94
|
EOS
|
95
95
|
|
96
96
|
ast = Reek::Source::SourceCode.from(src).syntax_tree
|
97
|
-
ctx = Reek::
|
97
|
+
ctx = Reek::Context::CodeContext.new(nil, ast)
|
98
98
|
@conds = @detector.conditional_counts(ctx)
|
99
99
|
end
|
100
100
|
|
@@ -1,9 +1,9 @@
|
|
1
1
|
require_relative '../../spec_helper'
|
2
|
-
require_relative '../../../lib/reek/
|
2
|
+
require_relative '../../../lib/reek/smells/smell_configuration'
|
3
3
|
|
4
|
-
RSpec.describe Reek::
|
4
|
+
RSpec.describe Reek::Smells::SmellConfiguration do
|
5
5
|
it 'returns the default value when key not found' do
|
6
|
-
cf =
|
6
|
+
cf = described_class.new({})
|
7
7
|
expect(cf.value('fred', nil, 27)).to eq(27)
|
8
8
|
end
|
9
9
|
|
@@ -12,7 +12,7 @@ RSpec.describe Reek::Core::SmellConfiguration do
|
|
12
12
|
@base_config = { 'enabled' => true, 'exclude' => [],
|
13
13
|
'reject' => [/^.$/, /[0-9]$/, /[A-Z]/],
|
14
14
|
'accept' => ['_'] }
|
15
|
-
@smell_config =
|
15
|
+
@smell_config = described_class.new(@base_config)
|
16
16
|
end
|
17
17
|
|
18
18
|
it { expect(@smell_config.merge!({})).to eq(@base_config) }
|
@@ -1,5 +1,5 @@
|
|
1
1
|
require_relative '../../spec_helper'
|
2
|
-
require_relative '../../../lib/reek/
|
2
|
+
require_relative '../../../lib/reek/smells/smell_configuration'
|
3
3
|
|
4
4
|
RSpec.shared_examples_for 'SmellDetector' do
|
5
5
|
context 'exception matching follows the context' do
|
@@ -21,7 +21,7 @@ RSpec.shared_examples_for 'SmellDetector' do
|
|
21
21
|
|
22
22
|
context 'configuration' do
|
23
23
|
it 'becomes disabled when disabled' do
|
24
|
-
enabled_key = Reek::
|
24
|
+
enabled_key = Reek::Smells::SmellConfiguration::ENABLED_KEY
|
25
25
|
@detector.configure_with(enabled_key => false)
|
26
26
|
expect(@detector).not_to be_enabled
|
27
27
|
end
|
@@ -1,9 +1,10 @@
|
|
1
1
|
require_relative '../../spec_helper'
|
2
|
-
require_relative '../../../lib/reek/
|
2
|
+
require_relative '../../../lib/reek/smells/smell_detector'
|
3
|
+
require_relative '../../../lib/reek/smells/smell_repository'
|
3
4
|
|
4
|
-
RSpec.describe Reek::
|
5
|
+
RSpec.describe Reek::Smells::SmellRepository do
|
5
6
|
describe '.smell_types' do
|
6
|
-
let(:smell_types) {
|
7
|
+
let(:smell_types) { described_class.smell_types }
|
7
8
|
|
8
9
|
it 'should include existing smell_types' do
|
9
10
|
expect(smell_types).to include(Reek::Smells::IrresponsibleModule)
|
@@ -19,7 +20,7 @@ RSpec.describe Reek::Core::SmellRepository do
|
|
19
20
|
end
|
20
21
|
|
21
22
|
it "should raise an ArgumentError if smell to configure doesn't exist" do
|
22
|
-
repository =
|
23
|
+
repository = described_class.new
|
23
24
|
expect { repository.configure('SomethingNonExistant', {}) }.
|
24
25
|
to raise_error ArgumentError,
|
25
26
|
'Unknown smell type SomethingNonExistant found in configuration'
|
@@ -72,7 +72,7 @@ RSpec.describe Reek::Smells::TooManyInstanceVariables do
|
|
72
72
|
end
|
73
73
|
end
|
74
74
|
EOS
|
75
|
-
ctx = Reek::
|
75
|
+
ctx = Reek::Context::CodeContext.new(nil, Reek::Source::SourceCode.from(src).syntax_tree)
|
76
76
|
@warning = @detector.examine_context(ctx)[0]
|
77
77
|
expect(@warning.source).to eq(@source_name)
|
78
78
|
expect(@warning.smell_category).to eq(Reek::Smells::TooManyInstanceVariables.smell_category)
|