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,7 +1,7 @@
|
|
1
1
|
require_relative '../../spec_helper'
|
2
|
-
require_relative '../../../lib/reek/
|
2
|
+
require_relative '../../../lib/reek/ast/sexp_formatter'
|
3
3
|
|
4
|
-
RSpec.describe Reek::
|
4
|
+
RSpec.describe Reek::AST::SexpFormatter do
|
5
5
|
describe '::format' do
|
6
6
|
it 'formats a simple s-expression' do
|
7
7
|
result = described_class.format s(:lvar, :foo)
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require_relative '../../spec_helper'
|
2
2
|
|
3
3
|
require_relative '../../../lib/reek/cli/options'
|
4
|
+
require_relative '../../../lib/reek/report/report'
|
4
5
|
|
5
6
|
RSpec.describe Reek::CLI::OptionInterpreter do
|
6
7
|
let(:options) { OpenStruct.new }
|
@@ -8,7 +9,7 @@ RSpec.describe Reek::CLI::OptionInterpreter do
|
|
8
9
|
|
9
10
|
describe '#reporter' do
|
10
11
|
it 'returns a Report::TextReport instance by default' do
|
11
|
-
expect(instance.reporter).to be_instance_of Reek::
|
12
|
+
expect(instance.reporter).to be_instance_of Reek::Report::TextReport
|
12
13
|
end
|
13
14
|
end
|
14
15
|
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
require_relative '../../spec_helper'
|
2
|
-
require_relative '../../../lib/reek/
|
2
|
+
require_relative '../../../lib/reek/cli/warning_collector'
|
3
3
|
require_relative '../../../lib/reek/smells/smell_warning'
|
4
4
|
|
5
|
-
RSpec.describe Reek::
|
5
|
+
RSpec.describe Reek::CLI::WarningCollector do
|
6
6
|
before(:each) do
|
7
|
-
@collector =
|
7
|
+
@collector = described_class.new
|
8
8
|
end
|
9
9
|
|
10
10
|
context 'when empty' do
|
@@ -1,7 +1,7 @@
|
|
1
|
-
require_relative '
|
2
|
-
require_relative '
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
require_relative '../../lib/reek/code_comment'
|
3
3
|
|
4
|
-
RSpec.describe Reek::
|
4
|
+
RSpec.describe Reek::CodeComment do
|
5
5
|
context 'with an empty comment' do
|
6
6
|
before :each do
|
7
7
|
@comment = described_class.new('')
|
@@ -1,9 +1,9 @@
|
|
1
1
|
require_relative '../../spec_helper'
|
2
2
|
require_relative '../../../lib/reek/configuration/app_configuration'
|
3
|
-
require_relative '../../../lib/reek/
|
3
|
+
require_relative '../../../lib/reek/smells/smell_repository'
|
4
4
|
|
5
5
|
RSpec.describe Reek::Configuration::AppConfiguration do
|
6
|
-
let(:sample_configuration_path) { 'spec/samples/simple_configuration.reek' }
|
6
|
+
let(:sample_configuration_path) { 'spec/samples/configuration/simple_configuration.reek' }
|
7
7
|
let(:sample_configuration_loaded) do
|
8
8
|
{
|
9
9
|
'UncommunicativeVariableName' => { 'enabled' => false },
|
@@ -12,32 +12,32 @@ RSpec.describe Reek::Configuration::AppConfiguration do
|
|
12
12
|
end
|
13
13
|
let(:default_configuration) { Hash.new }
|
14
14
|
|
15
|
-
after(:each) {
|
15
|
+
after(:each) { described_class.reset }
|
16
16
|
|
17
17
|
describe '.initialize_with' do
|
18
18
|
it 'loads a configuration file if it can find one' do
|
19
19
|
finder = Reek::Configuration::ConfigurationFileFinder
|
20
20
|
allow(finder).to receive(:find).and_return sample_configuration_path
|
21
|
-
expect(
|
21
|
+
expect(described_class.configuration).to eq(default_configuration)
|
22
22
|
|
23
|
-
|
24
|
-
expect(
|
23
|
+
described_class.initialize_with(nil)
|
24
|
+
expect(described_class.configuration).to eq(sample_configuration_loaded)
|
25
25
|
end
|
26
26
|
|
27
27
|
it 'leaves the default configuration untouched if it can\'t find one' do
|
28
28
|
allow(Reek::Configuration::ConfigurationFileFinder).to receive(:find).and_return nil
|
29
|
-
expect(
|
29
|
+
expect(described_class.configuration).to eq(default_configuration)
|
30
30
|
|
31
|
-
|
32
|
-
expect(
|
31
|
+
described_class.initialize_with(nil)
|
32
|
+
expect(described_class.configuration).to eq(default_configuration)
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
36
|
describe '.configure_smell_repository' do
|
37
37
|
it 'should configure a given smell_repository' do
|
38
|
-
|
39
|
-
smell_repository = Reek::
|
40
|
-
|
38
|
+
described_class.load_from_file(sample_configuration_path)
|
39
|
+
smell_repository = Reek::Smells::SmellRepository.new('def m; end')
|
40
|
+
described_class.configure_smell_repository smell_repository
|
41
41
|
|
42
42
|
expect(smell_repository.detectors[Reek::Smells::DataClump]).to be_enabled
|
43
43
|
expect(smell_repository.detectors[Reek::Smells::UncommunicativeVariableName]).
|
@@ -46,20 +46,33 @@ RSpec.describe Reek::Configuration::AppConfiguration do
|
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
+
describe '.exclude_paths' do
|
50
|
+
let(:config_path) { 'spec/samples/configuration/with_excluded_paths.reek' }
|
51
|
+
|
52
|
+
it 'should return all paths to exclude' do
|
53
|
+
with_test_config(config_path) do
|
54
|
+
expect(described_class.exclude_paths).to eq [
|
55
|
+
'spec/samples/source_with_exclude_paths/ignore_me',
|
56
|
+
'spec/samples/source_with_exclude_paths/nested/ignore_me_as_well'
|
57
|
+
]
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
49
62
|
describe '.load_from_file' do
|
50
63
|
it 'loads the configuration from given file' do
|
51
|
-
|
52
|
-
expect(
|
64
|
+
described_class.load_from_file(sample_configuration_path)
|
65
|
+
expect(described_class.configuration).to eq(sample_configuration_loaded)
|
53
66
|
end
|
54
67
|
end
|
55
68
|
|
56
69
|
describe '.reset' do
|
57
70
|
it 'resets the configuration' do
|
58
|
-
|
71
|
+
described_class.load_from_file(sample_configuration_path)
|
59
72
|
|
60
|
-
expect(
|
61
|
-
|
62
|
-
expect(
|
73
|
+
expect(described_class.configuration).to eq(sample_configuration_loaded)
|
74
|
+
described_class.reset
|
75
|
+
expect(described_class.configuration).to eq(default_configuration)
|
63
76
|
end
|
64
77
|
end
|
65
78
|
end
|
@@ -1,9 +1,9 @@
|
|
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/context/method_context'
|
3
|
+
require_relative '../../../lib/reek/context/module_context'
|
4
|
+
require_relative '../../../lib/reek/context/root_context'
|
5
5
|
|
6
|
-
RSpec.describe Reek::
|
6
|
+
RSpec.describe Reek::Context::CodeContext do
|
7
7
|
context 'name recognition' do
|
8
8
|
before :each do
|
9
9
|
@exp_name = 'random_name' # SMELL: could use a String.random here
|
@@ -11,8 +11,7 @@ RSpec.describe Reek::Core::CodeContext do
|
|
11
11
|
@exp = double('exp')
|
12
12
|
allow(@exp).to receive(:name).and_return(@exp_name)
|
13
13
|
allow(@exp).to receive(:full_name).and_return(@full_name)
|
14
|
-
|
15
|
-
@ctx = Reek::Core::CodeContext.new(nil, @exp)
|
14
|
+
@ctx = Reek::Context::CodeContext.new(nil, @exp)
|
16
15
|
end
|
17
16
|
it 'gets its short name from the exp' do
|
18
17
|
expect(@ctx.name).to eq(@exp_name)
|
@@ -42,7 +41,7 @@ RSpec.describe Reek::Core::CodeContext do
|
|
42
41
|
@outer_name = 'another_random sting'
|
43
42
|
allow(outer).to receive(:full_name).at_least(:once).and_return(@outer_name)
|
44
43
|
allow(outer).to receive(:config).and_return({})
|
45
|
-
@ctx = Reek::
|
44
|
+
@ctx = Reek::Context::CodeContext.new(outer, @exp)
|
46
45
|
end
|
47
46
|
it 'creates the correct full name' do
|
48
47
|
expect(@ctx.full_name).to eq("#{@full_name}")
|
@@ -58,10 +57,10 @@ RSpec.describe Reek::Core::CodeContext do
|
|
58
57
|
|
59
58
|
context 'generics' do
|
60
59
|
it 'should pass unknown method calls down the stack' do
|
61
|
-
stop = Reek::
|
60
|
+
stop = Reek::Context::RootContext.new
|
62
61
|
def stop.bananas(arg1, arg2) arg1 + arg2 + 43 end
|
63
|
-
element = Reek::
|
64
|
-
element = Reek::
|
62
|
+
element = Reek::Context::ModuleContext.new(stop, s(:module, :mod, nil))
|
63
|
+
element = Reek::Context::MethodContext.new(element, s(:def, :bad, s(:args), nil))
|
65
64
|
expect(element.bananas(17, -5)).to eq(55)
|
66
65
|
end
|
67
66
|
end
|
@@ -72,7 +71,7 @@ RSpec.describe Reek::Core::CodeContext do
|
|
72
71
|
@module_name = 'Emptiness'
|
73
72
|
src = "module #{@module_name}; end"
|
74
73
|
ast = Reek::Source::SourceCode.from(src).syntax_tree
|
75
|
-
@ctx = Reek::
|
74
|
+
@ctx = Reek::Context::CodeContext.new(nil, ast)
|
76
75
|
end
|
77
76
|
|
78
77
|
it 'yields no calls' do
|
@@ -104,7 +103,7 @@ RSpec.describe Reek::Core::CodeContext do
|
|
104
103
|
@method_name = 'calloo'
|
105
104
|
src = "module #{@module_name}; def #{@method_name}; puts('hello') end; end"
|
106
105
|
ast = Reek::Source::SourceCode.from(src).syntax_tree
|
107
|
-
@ctx = Reek::
|
106
|
+
@ctx = Reek::Context::CodeContext.new(nil, ast)
|
108
107
|
end
|
109
108
|
it 'yields no ifs' do
|
110
109
|
@ctx.each_node(:if, []) { |exp| raise "#{exp} yielded by empty module!" }
|
@@ -156,7 +155,7 @@ end
|
|
156
155
|
EOS
|
157
156
|
|
158
157
|
ast = Reek::Source::SourceCode.from(src).syntax_tree
|
159
|
-
ctx = Reek::
|
158
|
+
ctx = Reek::Context::CodeContext.new(nil, ast)
|
160
159
|
expect(ctx.each_node(:if, []).length).to eq(3)
|
161
160
|
end
|
162
161
|
end
|
@@ -164,12 +163,12 @@ EOS
|
|
164
163
|
describe '#config_for' do
|
165
164
|
let(:expression) { double('exp') }
|
166
165
|
let(:outer) { nil }
|
167
|
-
let(:context) { Reek::
|
166
|
+
let(:context) { Reek::Context::CodeContext.new(outer, expression) }
|
168
167
|
let(:sniffer) { double('sniffer') }
|
169
168
|
|
170
169
|
before :each do
|
171
170
|
allow(sniffer).to receive(:smell_type).and_return('DuplicateMethodCall')
|
172
|
-
allow(expression).to receive(:
|
171
|
+
allow(expression).to receive(:full_comment).and_return(
|
173
172
|
':reek:DuplicateMethodCall: { allow_calls: [ puts ] }')
|
174
173
|
end
|
175
174
|
|
@@ -1,12 +1,12 @@
|
|
1
1
|
require_relative '../../spec_helper'
|
2
|
-
require_relative '../../../lib/reek/
|
3
|
-
require_relative '../../../lib/reek/
|
2
|
+
require_relative '../../../lib/reek/context/method_context'
|
3
|
+
require_relative '../../../lib/reek/context/root_context'
|
4
4
|
|
5
|
-
RSpec.describe Reek::
|
5
|
+
RSpec.describe Reek::Context::MethodContext, 'matching' do
|
6
6
|
before :each do
|
7
7
|
exp = double('exp').as_null_object
|
8
8
|
expect(exp).to receive(:full_name).at_least(:once).and_return('mod')
|
9
|
-
@element = Reek::
|
9
|
+
@element = Reek::Context::MethodContext.new(Reek::Context::RootContext.new, exp)
|
10
10
|
end
|
11
11
|
|
12
12
|
it 'should recognise itself in a collection of names' do
|
@@ -20,10 +20,10 @@ RSpec.describe Reek::Core::MethodContext, 'matching' do
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
RSpec.describe Reek::
|
23
|
+
RSpec.describe Reek::Context::MethodContext do
|
24
24
|
let(:mc) do
|
25
25
|
sexp = s(:def, :foo, s(:args, s(:arg, :bar)), nil)
|
26
|
-
Reek::
|
26
|
+
Reek::Context::MethodContext.new(Reek::Context::RootContext.new, sexp)
|
27
27
|
end
|
28
28
|
|
29
29
|
describe '#envious_receivers' do
|
@@ -51,10 +51,10 @@ RSpec.describe Reek::Core::MethodContext do
|
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
|
-
RSpec.describe Reek::
|
54
|
+
RSpec.describe Reek::Context::MethodParameters, 'default assignments' do
|
55
55
|
def assignments_from(src)
|
56
56
|
exp = Reek::Source::SourceCode.from(src).syntax_tree
|
57
|
-
ctx = Reek::
|
57
|
+
ctx = Reek::Context::MethodContext.new(Reek::Context::RootContext.new, exp)
|
58
58
|
ctx.parameters.default_assignments
|
59
59
|
end
|
60
60
|
|
@@ -1,8 +1,8 @@
|
|
1
1
|
require_relative '../../spec_helper'
|
2
|
-
require_relative '../../../lib/reek/
|
3
|
-
require_relative '../../../lib/reek/
|
2
|
+
require_relative '../../../lib/reek/context/module_context'
|
3
|
+
require_relative '../../../lib/reek/context/root_context'
|
4
4
|
|
5
|
-
RSpec.describe Reek::
|
5
|
+
RSpec.describe Reek::Context::ModuleContext do
|
6
6
|
it 'should report module name for smell in method' do
|
7
7
|
expect('
|
8
8
|
module Fred
|
@@ -19,7 +19,7 @@ module Fred
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
RSpec.describe Reek::
|
22
|
+
RSpec.describe Reek::Context::ModuleContext do
|
23
23
|
it 'should recognise global constant' do
|
24
24
|
expect('# module for test
|
25
25
|
module ::Global
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require_relative '../../spec_helper'
|
2
|
+
require_relative '../../../lib/reek/context/root_context'
|
3
|
+
|
4
|
+
RSpec.describe Reek::Context::RootContext do
|
5
|
+
before :each do
|
6
|
+
@root = Reek::Context::RootContext.new
|
7
|
+
end
|
8
|
+
|
9
|
+
context 'full_name' do
|
10
|
+
it 'reports full context' do
|
11
|
+
expect(@root.full_name).to eq('')
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -1,11 +1,11 @@
|
|
1
1
|
require_relative '../../spec_helper'
|
2
|
-
require_relative '../../../lib/reek/
|
3
|
-
require_relative '../../../lib/reek/
|
2
|
+
require_relative '../../../lib/reek/context/singleton_method_context'
|
3
|
+
require_relative '../../../lib/reek/context/root_context'
|
4
4
|
|
5
|
-
RSpec.describe Reek::
|
5
|
+
RSpec.describe Reek::Context::SingletonMethodContext do
|
6
6
|
let(:smc) do
|
7
7
|
sexp = s(:def, :foo, s(:args, s(:arg, :bar)), nil)
|
8
|
-
Reek::
|
8
|
+
Reek::Context::SingletonMethodContext.new(Reek::Context::RootContext.new, sexp)
|
9
9
|
end
|
10
10
|
|
11
11
|
describe '#envious_receivers' do
|
@@ -1,5 +1,5 @@
|
|
1
|
-
require_relative '
|
2
|
-
require_relative '
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
require_relative '../../lib/reek/examiner'
|
3
3
|
|
4
4
|
RSpec.shared_examples_for 'no smells found' do
|
5
5
|
it 'is not smelly' do
|
@@ -22,7 +22,7 @@ RSpec.shared_examples_for 'one smell found' do
|
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
-
RSpec.describe Reek::
|
25
|
+
RSpec.describe Reek::Examiner do
|
26
26
|
before :each do
|
27
27
|
@expected_first_smell = 'NestedIterators'
|
28
28
|
end
|
@@ -44,45 +44,6 @@ RSpec.describe Reek::Core::Examiner do
|
|
44
44
|
it_should_behave_like 'one smell found'
|
45
45
|
end
|
46
46
|
|
47
|
-
context 'with a partially masked smelly Dir' do
|
48
|
-
around(:each) do |example|
|
49
|
-
with_test_config('spec/samples/all_but_one_masked/masked.reek') do
|
50
|
-
example.run
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
before :each do
|
55
|
-
smelly_dir = Dir['spec/samples/all_but_one_masked/*.rb']
|
56
|
-
@examiner = described_class.new(smelly_dir)
|
57
|
-
end
|
58
|
-
|
59
|
-
it_should_behave_like 'one smell found'
|
60
|
-
end
|
61
|
-
|
62
|
-
context 'with a fragrant Dir' do
|
63
|
-
before :each do
|
64
|
-
clean_dir = Dir['spec/samples/three_clean_files/*.rb']
|
65
|
-
@examiner = described_class.new(clean_dir)
|
66
|
-
end
|
67
|
-
|
68
|
-
it_should_behave_like 'no smells found'
|
69
|
-
end
|
70
|
-
|
71
|
-
context 'with a smelly Dir masked by a dotfile' do
|
72
|
-
around(:each) do |example|
|
73
|
-
with_test_config('spec/samples/masked_by_dotfile/.reek') do
|
74
|
-
example.run
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
before :each do
|
79
|
-
smelly_dir = Dir['spec/samples/masked_by_dotfile/*.rb']
|
80
|
-
@examiner = described_class.new(smelly_dir)
|
81
|
-
end
|
82
|
-
|
83
|
-
it_should_behave_like 'one smell found'
|
84
|
-
end
|
85
|
-
|
86
47
|
context 'with a partially masked smelly File' do
|
87
48
|
around(:each) do |example|
|
88
49
|
with_test_config('spec/samples/all_but_one_masked/masked.reek') do
|
@@ -1,12 +1,12 @@
|
|
1
1
|
require_relative '../../spec_helper'
|
2
|
-
require_relative '../../../lib/reek/
|
3
|
-
require_relative '../../../lib/reek/
|
2
|
+
require_relative '../../../lib/reek/examiner'
|
3
|
+
require_relative '../../../lib/reek/report/report'
|
4
4
|
|
5
|
-
RSpec.describe Reek::
|
6
|
-
let(:instance) { Reek::
|
5
|
+
RSpec.describe Reek::Report::HTMLReport do
|
6
|
+
let(:instance) { Reek::Report::HTMLReport.new }
|
7
7
|
|
8
8
|
context 'with an empty source' do
|
9
|
-
let(:examiner) { Reek::
|
9
|
+
let(:examiner) { Reek::Examiner.new('') }
|
10
10
|
|
11
11
|
before do
|
12
12
|
instance.add_examiner examiner
|
@@ -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::JSONReport do
|
7
|
+
let(:instance) { Reek::Report::JSONReport.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 json' do
|
17
|
+
expect { instance.show }.to output(/^\[\]$/).to_stdout
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -1,23 +1,23 @@
|
|
1
1
|
require_relative '../../spec_helper'
|
2
|
-
require_relative '../../../lib/reek/
|
3
|
-
require_relative '../../../lib/reek/
|
4
|
-
require_relative '../../../lib/reek/
|
5
|
-
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
|
+
require_relative '../../../lib/reek/report/heading_formatter'
|
6
6
|
require 'rainbow'
|
7
7
|
|
8
|
-
RSpec.describe Reek::
|
8
|
+
RSpec.describe Reek::Report::TextReport do
|
9
9
|
let(:report_options) do
|
10
10
|
{
|
11
|
-
warning_formatter: Reek::
|
12
|
-
report_formatter: Reek::
|
13
|
-
heading_formatter: Reek::
|
11
|
+
warning_formatter: Reek::Report::SimpleWarningFormatter.new,
|
12
|
+
report_formatter: Reek::Report::Formatter,
|
13
|
+
heading_formatter: Reek::Report::HeadingFormatter::Quiet
|
14
14
|
}
|
15
15
|
end
|
16
|
-
let(:instance) { Reek::
|
16
|
+
let(:instance) { Reek::Report::TextReport.new report_options }
|
17
17
|
|
18
18
|
context 'with a single empty source' do
|
19
19
|
before do
|
20
|
-
instance.add_examiner Reek::
|
20
|
+
instance.add_examiner Reek::Examiner.new('')
|
21
21
|
end
|
22
22
|
|
23
23
|
it 'has an empty quiet_report' do
|
@@ -27,8 +27,8 @@ RSpec.describe Reek::CLI::Report::TextReport do
|
|
27
27
|
|
28
28
|
context 'with non smelly files' do
|
29
29
|
before do
|
30
|
-
instance.add_examiner(Reek::
|
31
|
-
instance.add_examiner(Reek::
|
30
|
+
instance.add_examiner(Reek::Examiner.new('def simple() puts "a" end'))
|
31
|
+
instance.add_examiner(Reek::Examiner.new('def simple() puts "a" end'))
|
32
32
|
end
|
33
33
|
|
34
34
|
context 'with colors disabled' do
|
@@ -54,8 +54,8 @@ RSpec.describe Reek::CLI::Report::TextReport do
|
|
54
54
|
|
55
55
|
context 'with a couple of smells' do
|
56
56
|
before do
|
57
|
-
instance.add_examiner(Reek::
|
58
|
-
instance.add_examiner(Reek::
|
57
|
+
instance.add_examiner(Reek::Examiner.new('def simple(a) a[3] end'))
|
58
|
+
instance.add_examiner(Reek::Examiner.new('def simple(a) a[3] end'))
|
59
59
|
end
|
60
60
|
|
61
61
|
context 'with colors disabled' do
|