reek 2.2.1 → 3.0.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 +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)
|