reek 6.0.3 → 6.0.4
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/CHANGELOG.md +6 -1
- data/CONTRIBUTING.md +3 -0
- data/Dockerfile +1 -1
- data/Gemfile +6 -6
- data/lib/reek/ast/ast_node_class_map.rb +1 -1
- data/lib/reek/report/code_climate/code_climate_formatter.rb +1 -3
- data/lib/reek/smell_detectors/base_detector.rb +1 -1
- data/lib/reek/smell_warning.rb +1 -1
- data/lib/reek/source/source_locator.rb +1 -3
- data/lib/reek/version.rb +1 -1
- data/reek.gemspec +4 -1
- metadata +3 -208
- data/docs/API.md +0 -174
- data/docs/Attribute.md +0 -39
- data/docs/Basic-Smell-Options.md +0 -85
- data/docs/Boolean-Parameter.md +0 -54
- data/docs/Class-Variable.md +0 -40
- data/docs/Code-Smells.md +0 -39
- data/docs/Command-Line-Options.md +0 -119
- data/docs/Control-Couple.md +0 -26
- data/docs/Control-Parameter.md +0 -32
- data/docs/Data-Clump.md +0 -46
- data/docs/Duplicate-Method-Call.md +0 -264
- data/docs/Feature-Envy.md +0 -93
- data/docs/How-To-Write-New-Detectors.md +0 -132
- data/docs/How-reek-works-internally.md +0 -114
- data/docs/Instance-Variable-Assumption.md +0 -163
- data/docs/Irresponsible-Module.md +0 -47
- data/docs/Large-Class.md +0 -16
- data/docs/Long-Parameter-List.md +0 -39
- data/docs/Long-Yield-List.md +0 -37
- data/docs/Manual-Dispatch.md +0 -30
- data/docs/Missing-Safe-Method.md +0 -92
- data/docs/Module-Initialize.md +0 -62
- data/docs/Nested-Iterators.md +0 -59
- data/docs/Nil-Check.md +0 -47
- data/docs/RSpec-matchers.md +0 -129
- data/docs/Rake-Task.md +0 -66
- data/docs/Reek-4-to-Reek-5-migration.md +0 -188
- data/docs/Reek-Driven-Development.md +0 -46
- data/docs/Repeated-Conditional.md +0 -47
- data/docs/Simulated-Polymorphism.md +0 -16
- data/docs/Smell-Suppression.md +0 -96
- data/docs/Style-Guide.md +0 -19
- data/docs/Subclassed-From-Core-Class.md +0 -79
- data/docs/Too-Many-Constants.md +0 -37
- data/docs/Too-Many-Instance-Variables.md +0 -43
- data/docs/Too-Many-Methods.md +0 -56
- data/docs/Too-Many-Statements.md +0 -54
- data/docs/Uncommunicative-Method-Name.md +0 -94
- data/docs/Uncommunicative-Module-Name.md +0 -92
- data/docs/Uncommunicative-Name.md +0 -18
- data/docs/Uncommunicative-Parameter-Name.md +0 -90
- data/docs/Uncommunicative-Variable-Name.md +0 -96
- data/docs/Unused-Parameters.md +0 -28
- data/docs/Unused-Private-Method.md +0 -101
- data/docs/Utility-Function.md +0 -56
- data/docs/Versioning-Policy.md +0 -7
- data/docs/YAML-Reports.md +0 -93
- data/docs/defaults.reek.yml +0 -129
- data/docs/templates/default/docstring/html/public_api_marker.erb +0 -3
- data/docs/templates/default/docstring/setup.rb +0 -35
- data/docs/templates/default/fulldoc/html/css/common.css +0 -1
- data/docs/yard_plugin.rb +0 -17
- data/features/command_line_interface/basic_usage.feature +0 -15
- data/features/command_line_interface/options.feature +0 -123
- data/features/command_line_interface/show_progress.feature +0 -33
- data/features/command_line_interface/smell_selection.feature +0 -15
- data/features/command_line_interface/smells_count.feature +0 -38
- data/features/command_line_interface/stdin.feature +0 -65
- data/features/configuration_files/accept_setting.feature +0 -87
- data/features/configuration_files/directory_specific_directives.feature +0 -274
- data/features/configuration_files/exclude_directives.feature +0 -35
- data/features/configuration_files/exclude_paths_directives.feature +0 -42
- data/features/configuration_files/masking_smells.feature +0 -94
- data/features/configuration_files/mix_accept_reject_setting.feature +0 -84
- data/features/configuration_files/reject_setting.feature +0 -89
- data/features/configuration_files/schema_validation.feature +0 -59
- data/features/configuration_files/show_configuration_file.feature +0 -44
- data/features/configuration_files/unused_private_method.feature +0 -68
- data/features/configuration_loading.feature +0 -91
- data/features/configuration_via_source_comments/erroneous_source_comments.feature +0 -68
- data/features/configuration_via_source_comments/well_formed_source_comments.feature +0 -116
- data/features/locales.feature +0 -32
- data/features/programmatic_access.feature +0 -41
- data/features/rake_task/rake_task.feature +0 -138
- data/features/reports/codeclimate.feature +0 -59
- data/features/reports/json.feature +0 -59
- data/features/reports/reports.feature +0 -219
- data/features/reports/yaml.feature +0 -52
- data/features/rspec_matcher.feature +0 -41
- data/features/samples.feature +0 -305
- data/features/step_definitions/.rubocop.yml +0 -5
- data/features/step_definitions/reek_steps.rb +0 -102
- data/features/step_definitions/sample_file_steps.rb +0 -63
- data/features/support/env.rb +0 -33
- data/features/todo_list.feature +0 -108
- data/samples/checkstyle.xml +0 -7
- data/samples/clean_source/clean.rb +0 -6
- data/samples/configuration/accepts_rejects_and_excludes_for_detectors.reek.yml +0 -29
- data/samples/configuration/accepts_rejects_and_excludes_for_directory_directives.reek.yml +0 -30
- data/samples/configuration/corrupt.reek +0 -1
- data/samples/configuration/empty.reek +0 -0
- data/samples/configuration/full_configuration.reek +0 -13
- data/samples/configuration/full_mask.reek +0 -6
- data/samples/configuration/home/home.reek.yml +0 -4
- data/samples/configuration/partial_mask.reek +0 -4
- data/samples/configuration/regular_configuration/.reek.yml +0 -4
- data/samples/configuration/regular_configuration/empty_sub_directory/.gitignore +0 -0
- data/samples/configuration/with_excluded_paths.reek +0 -5
- data/samples/no_config_file/.keep +0 -0
- data/samples/paths.rb +0 -5
- data/samples/smelly_source/inline.rb +0 -704
- data/samples/smelly_source/optparse.rb +0 -1788
- data/samples/smelly_source/redcloth.rb +0 -1130
- data/samples/smelly_source/ruby.rb +0 -368
- data/samples/smelly_source/smelly.rb +0 -7
- data/samples/source_with_exclude_paths/ignore_me/uncommunicative_method_name.rb +0 -5
- data/samples/source_with_exclude_paths/nested/ignore_me_as_well/irresponsible_module.rb +0 -2
- data/samples/source_with_exclude_paths/nested/uncommunicative_parameter_name.rb +0 -6
- data/samples/source_with_exclude_paths/nested/uncommunicative_variable_name.rb +0 -6
- data/samples/source_with_hidden_directories/.hidden/hidden.rb +0 -1
- data/samples/source_with_hidden_directories/not_hidden.rb +0 -1
- data/samples/source_with_non_ruby_files/gibberish +0 -1
- data/samples/source_with_non_ruby_files/python_source.py +0 -1
- data/samples/source_with_non_ruby_files/ruby.rb +0 -6
- data/spec/performance/reek/smell_detectors/runtime_speed_spec.rb +0 -15
- data/spec/quality/documentation_spec.rb +0 -41
- data/spec/quality/reek_source_spec.rb +0 -11
- data/spec/reek/ast/node_spec.rb +0 -211
- data/spec/reek/ast/object_refs_spec.rb +0 -83
- data/spec/reek/ast/reference_collector_spec.rb +0 -47
- data/spec/reek/ast/sexp_extensions_spec.rb +0 -498
- data/spec/reek/cli/application_spec.rb +0 -168
- data/spec/reek/cli/command/report_command_spec.rb +0 -44
- data/spec/reek/cli/command/todo_list_command_spec.rb +0 -86
- data/spec/reek/cli/options_spec.rb +0 -51
- data/spec/reek/cli/silencer_spec.rb +0 -28
- data/spec/reek/code_comment_spec.rb +0 -184
- data/spec/reek/configuration/app_configuration_spec.rb +0 -195
- data/spec/reek/configuration/configuration_file_finder_spec.rb +0 -230
- data/spec/reek/configuration/default_directive_spec.rb +0 -13
- data/spec/reek/configuration/directory_directives_spec.rb +0 -122
- data/spec/reek/configuration/excluded_paths_spec.rb +0 -25
- data/spec/reek/configuration/rake_task_converter_spec.rb +0 -33
- data/spec/reek/configuration/schema_validator_spec.rb +0 -165
- data/spec/reek/context/code_context_spec.rb +0 -192
- data/spec/reek/context/ghost_context_spec.rb +0 -60
- data/spec/reek/context/method_context_spec.rb +0 -72
- data/spec/reek/context/module_context_spec.rb +0 -55
- data/spec/reek/context/root_context_spec.rb +0 -12
- data/spec/reek/context/statement_counter_spec.rb +0 -24
- data/spec/reek/context_builder_spec.rb +0 -457
- data/spec/reek/detector_repository_spec.rb +0 -22
- data/spec/reek/documentation_link_spec.rb +0 -20
- data/spec/reek/errors/base_error_spec.rb +0 -13
- data/spec/reek/examiner_spec.rb +0 -309
- data/spec/reek/logging_error_handler_spec.rb +0 -24
- data/spec/reek/rake/task_spec.rb +0 -56
- data/spec/reek/report/code_climate/code_climate_configuration_spec.rb +0 -22
- data/spec/reek/report/code_climate/code_climate_fingerprint_spec.rb +0 -126
- data/spec/reek/report/code_climate/code_climate_formatter_spec.rb +0 -51
- data/spec/reek/report/code_climate/code_climate_report_spec.rb +0 -56
- data/spec/reek/report/html_report_spec.rb +0 -19
- data/spec/reek/report/json_report_spec.rb +0 -58
- data/spec/reek/report/location_formatter_spec.rb +0 -32
- data/spec/reek/report/progress_formatter_spec.rb +0 -68
- data/spec/reek/report/text_report_spec.rb +0 -89
- data/spec/reek/report/xml_report_spec.rb +0 -24
- data/spec/reek/report/yaml_report_spec.rb +0 -55
- data/spec/reek/report_spec.rb +0 -28
- data/spec/reek/smell_configuration_spec.rb +0 -56
- data/spec/reek/smell_detectors/attribute_spec.rb +0 -197
- data/spec/reek/smell_detectors/base_detector_spec.rb +0 -50
- data/spec/reek/smell_detectors/boolean_parameter_spec.rb +0 -93
- data/spec/reek/smell_detectors/class_variable_spec.rb +0 -106
- data/spec/reek/smell_detectors/control_parameter_spec.rb +0 -300
- data/spec/reek/smell_detectors/data_clump_spec.rb +0 -134
- data/spec/reek/smell_detectors/duplicate_method_call_spec.rb +0 -211
- data/spec/reek/smell_detectors/feature_envy_spec.rb +0 -295
- data/spec/reek/smell_detectors/instance_variable_assumption_spec.rb +0 -96
- data/spec/reek/smell_detectors/irresponsible_module_spec.rb +0 -226
- data/spec/reek/smell_detectors/long_parameter_list_spec.rb +0 -61
- data/spec/reek/smell_detectors/long_yield_list_spec.rb +0 -49
- data/spec/reek/smell_detectors/manual_dispatch_spec.rb +0 -75
- data/spec/reek/smell_detectors/missing_safe_method_spec.rb +0 -68
- data/spec/reek/smell_detectors/module_initialize_spec.rb +0 -77
- data/spec/reek/smell_detectors/nested_iterators_spec.rb +0 -333
- data/spec/reek/smell_detectors/nil_check_spec.rb +0 -100
- data/spec/reek/smell_detectors/repeated_conditional_spec.rb +0 -100
- data/spec/reek/smell_detectors/subclassed_from_core_class_spec.rb +0 -77
- data/spec/reek/smell_detectors/too_many_constants_spec.rb +0 -144
- data/spec/reek/smell_detectors/too_many_instance_variables_spec.rb +0 -132
- data/spec/reek/smell_detectors/too_many_methods_spec.rb +0 -54
- data/spec/reek/smell_detectors/too_many_statements_spec.rb +0 -90
- data/spec/reek/smell_detectors/uncommunicative_method_name_spec.rb +0 -78
- data/spec/reek/smell_detectors/uncommunicative_module_name_spec.rb +0 -78
- data/spec/reek/smell_detectors/uncommunicative_parameter_name_spec.rb +0 -147
- data/spec/reek/smell_detectors/uncommunicative_variable_name_spec.rb +0 -201
- data/spec/reek/smell_detectors/unused_parameters_spec.rb +0 -114
- data/spec/reek/smell_detectors/unused_private_method_spec.rb +0 -205
- data/spec/reek/smell_detectors/utility_function_spec.rb +0 -309
- data/spec/reek/smell_warning_spec.rb +0 -137
- data/spec/reek/source/source_code_spec.rb +0 -79
- data/spec/reek/source/source_locator_spec.rb +0 -166
- data/spec/reek/spec/should_reek_of_spec.rb +0 -153
- data/spec/reek/spec/should_reek_only_of_spec.rb +0 -91
- data/spec/reek/spec/should_reek_spec.rb +0 -52
- data/spec/reek/spec/smell_matcher_spec.rb +0 -87
- data/spec/reek/tree_dresser_spec.rb +0 -46
- data/spec/spec_helper.rb +0 -110
- data/tasks/configuration.rake +0 -18
- data/tasks/console.rake +0 -5
- data/tasks/reek.rake +0 -6
- data/tasks/rubocop.rake +0 -11
- data/tasks/test.rake +0 -32
@@ -1,106 +0,0 @@
|
|
1
|
-
require_relative '../../spec_helper'
|
2
|
-
require_lib 'reek/smell_detectors/class_variable'
|
3
|
-
|
4
|
-
RSpec.describe Reek::SmellDetectors::ClassVariable do
|
5
|
-
it 'reports the right values' do
|
6
|
-
src = <<-RUBY
|
7
|
-
class Alfa
|
8
|
-
@@bravo = 5
|
9
|
-
end
|
10
|
-
RUBY
|
11
|
-
|
12
|
-
expect(src).to reek_of(:ClassVariable,
|
13
|
-
lines: [2],
|
14
|
-
context: 'Alfa',
|
15
|
-
message: "declares the class variable '@@bravo'",
|
16
|
-
source: 'string',
|
17
|
-
name: '@@bravo')
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'does count all class variables' do
|
21
|
-
src = <<-RUBY
|
22
|
-
class Alfa
|
23
|
-
@@bravo = 42
|
24
|
-
@@charlie = 99
|
25
|
-
end
|
26
|
-
RUBY
|
27
|
-
|
28
|
-
expect(src).
|
29
|
-
to reek_of(:ClassVariable, name: '@@bravo').
|
30
|
-
and reek_of(:ClassVariable, name: '@@charlie')
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'does not report class instance variables' do
|
34
|
-
src = <<-RUBY
|
35
|
-
class Alfa
|
36
|
-
@bravo = 42
|
37
|
-
end
|
38
|
-
RUBY
|
39
|
-
|
40
|
-
expect(src).not_to reek_of(:ClassVariable)
|
41
|
-
end
|
42
|
-
|
43
|
-
context 'with no class variables' do
|
44
|
-
it 'records nothing in the class' do
|
45
|
-
src = <<-RUBY
|
46
|
-
class Alfa
|
47
|
-
def bravo; end
|
48
|
-
end
|
49
|
-
RUBY
|
50
|
-
|
51
|
-
expect(src).not_to reek_of(:ClassVariable)
|
52
|
-
end
|
53
|
-
|
54
|
-
it 'records nothing in the module' do
|
55
|
-
src = <<-RUBY
|
56
|
-
module Alfa
|
57
|
-
def bravo; end
|
58
|
-
end
|
59
|
-
RUBY
|
60
|
-
|
61
|
-
expect(src).not_to reek_of(:ClassVariable)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
['class', 'module'].each do |scope|
|
66
|
-
context "when examining a #{scope}" do
|
67
|
-
it 'reports a class variable set in a method' do
|
68
|
-
src = <<-RUBY
|
69
|
-
#{scope} Alfa
|
70
|
-
def bravo
|
71
|
-
@@charlie = {}
|
72
|
-
end
|
73
|
-
end
|
74
|
-
RUBY
|
75
|
-
|
76
|
-
expect(src).to reek_of(:ClassVariable, name: '@@charlie')
|
77
|
-
end
|
78
|
-
|
79
|
-
it 'reports a class variable used in a method' do
|
80
|
-
src = <<-RUBY
|
81
|
-
#{scope} Alfa
|
82
|
-
def bravo
|
83
|
-
puts @@charlie
|
84
|
-
end
|
85
|
-
end
|
86
|
-
RUBY
|
87
|
-
|
88
|
-
expect(src).to reek_of(:ClassVariable, name: '@@charlie')
|
89
|
-
end
|
90
|
-
|
91
|
-
it "reports a class variable set in the #{scope} body and used in a method" do
|
92
|
-
src = <<-RUBY
|
93
|
-
#{scope} Alfa
|
94
|
-
@@bravo = 42
|
95
|
-
|
96
|
-
def charlie
|
97
|
-
puts @@bravo
|
98
|
-
end
|
99
|
-
end
|
100
|
-
RUBY
|
101
|
-
|
102
|
-
expect(src).to reek_of(:ClassVariable, name: '@@bravo')
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
@@ -1,300 +0,0 @@
|
|
1
|
-
require_relative '../../spec_helper'
|
2
|
-
require_lib 'reek/smell_detectors/control_parameter'
|
3
|
-
|
4
|
-
RSpec.describe Reek::SmellDetectors::ControlParameter do
|
5
|
-
it 'reports the right values' do
|
6
|
-
src = <<-RUBY
|
7
|
-
def alfa(bravo)
|
8
|
-
bravo ? true : false
|
9
|
-
end
|
10
|
-
RUBY
|
11
|
-
|
12
|
-
expect(src).to reek_of(:ControlParameter,
|
13
|
-
lines: [2],
|
14
|
-
context: 'alfa',
|
15
|
-
message: "is controlled by argument 'bravo'",
|
16
|
-
source: 'string',
|
17
|
-
argument: 'bravo')
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'does count all occurences' do
|
21
|
-
src = <<-RUBY
|
22
|
-
def alfa(bravo, charlie)
|
23
|
-
bravo ? true : false
|
24
|
-
charlie ? true : false
|
25
|
-
end
|
26
|
-
RUBY
|
27
|
-
|
28
|
-
expect(src).
|
29
|
-
to reek_of(:ControlParameter, lines: [2], argument: 'bravo').
|
30
|
-
and reek_of(:ControlParameter, lines: [3], argument: 'charlie')
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'does count multiple occurences of the same parameter' do
|
34
|
-
src = <<-RUBY
|
35
|
-
def alfa(bravo, charlie)
|
36
|
-
if bravo
|
37
|
-
delta if charlie
|
38
|
-
end
|
39
|
-
if charlie
|
40
|
-
delta if bravo
|
41
|
-
end
|
42
|
-
end
|
43
|
-
RUBY
|
44
|
-
|
45
|
-
expect(src).
|
46
|
-
to reek_of(:ControlParameter, lines: [2, 6], argument: 'bravo').
|
47
|
-
and reek_of(:ControlParameter, lines: [3, 5], argument: 'charlie')
|
48
|
-
end
|
49
|
-
|
50
|
-
context 'when a parameter is not used to determine code path' do
|
51
|
-
it 'does not report a ternary check on an ivar' do
|
52
|
-
src = 'def alfa(bravo) @charlie ? bravo : false end'
|
53
|
-
expect(src).not_to reek_of(:ControlParameter)
|
54
|
-
end
|
55
|
-
|
56
|
-
it 'does not report a ternary check on a lvar' do
|
57
|
-
src = 'def alfa(bravo) charlie = 27; charlie ? bravo : @delta end'
|
58
|
-
expect(src).not_to reek_of(:ControlParameter)
|
59
|
-
end
|
60
|
-
|
61
|
-
it 'does not report when parameter is unused' do
|
62
|
-
src = 'def alfa(bravo) charlie = 1 end'
|
63
|
-
expect(src).not_to reek_of(:ControlParameter)
|
64
|
-
end
|
65
|
-
|
66
|
-
it 'does not report when parameter is used inside conditional' do
|
67
|
-
src = 'def alfa(bravo) if true then puts bravo end end'
|
68
|
-
expect(src).not_to reek_of(:ControlParameter)
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
context 'when a parameter is only used to determine code path' do
|
73
|
-
it 'reports a ternary check on a parameter' do
|
74
|
-
src = 'def alfa(bravo); bravo ? true : false; end'
|
75
|
-
expect(src).to reek_of(:ControlParameter)
|
76
|
-
end
|
77
|
-
|
78
|
-
it 'reports a couple inside a block' do
|
79
|
-
src = 'def alfa(bravo); charlie.map { |delta| bravo ? delta : "#{delta}" }; end'
|
80
|
-
expect(src).to reek_of(:ControlParameter)
|
81
|
-
end
|
82
|
-
|
83
|
-
it 'reports on an if statement modifier' do
|
84
|
-
src = 'def alfa(bravo); charlie if bravo; end'
|
85
|
-
expect(src).to reek_of(:ControlParameter)
|
86
|
-
end
|
87
|
-
|
88
|
-
it 'reports on an unless statement modifier' do
|
89
|
-
src = 'def alfa(bravo); charlie unless bravo; end'
|
90
|
-
expect(src).to reek_of(:ControlParameter)
|
91
|
-
end
|
92
|
-
|
93
|
-
it 'reports on if control expression' do
|
94
|
-
src = 'def alfa(bravo); if bravo then charlie end; end'
|
95
|
-
expect(src).to reek_of(:ControlParameter)
|
96
|
-
end
|
97
|
-
|
98
|
-
it 'reports on if control expression with &&' do
|
99
|
-
src = 'def alfa(bravo); if bravo && true then charlie end; end'
|
100
|
-
expect(src).to reek_of(:ControlParameter)
|
101
|
-
end
|
102
|
-
|
103
|
-
it 'reports on if control expression with `and`' do
|
104
|
-
src = 'def alfa(bravo); if bravo and true then charlie end; end'
|
105
|
-
expect(src).to reek_of(:ControlParameter)
|
106
|
-
end
|
107
|
-
|
108
|
-
it 'reports on if control expression with preceding &&' do
|
109
|
-
src = 'def alfa(bravo); if true && bravo then charlie end; end'
|
110
|
-
expect(src).to reek_of(:ControlParameter)
|
111
|
-
end
|
112
|
-
|
113
|
-
it 'reports on if control expression with ||' do
|
114
|
-
src = 'def alfa(bravo); if bravo || true then charlie end; end'
|
115
|
-
expect(src).to reek_of(:ControlParameter)
|
116
|
-
end
|
117
|
-
|
118
|
-
it 'reports on if control expression with or' do
|
119
|
-
src = 'def alfa(bravo); if bravo or true then charlie end; end'
|
120
|
-
expect(src).to reek_of(:ControlParameter)
|
121
|
-
end
|
122
|
-
|
123
|
-
it 'reports on if control expression with if' do
|
124
|
-
src = 'def alfa(bravo); if (bravo if true) then charlie end; end'
|
125
|
-
expect(src).to reek_of(:ControlParameter)
|
126
|
-
end
|
127
|
-
|
128
|
-
it 'reports on && notation' do
|
129
|
-
src = 'def alfa(bravo); bravo && charlie; end'
|
130
|
-
expect(src).to reek_of(:ControlParameter)
|
131
|
-
end
|
132
|
-
|
133
|
-
it 'reports on || notation' do
|
134
|
-
src = 'def alfa(bravo); bravo || charlie; end'
|
135
|
-
expect(src).to reek_of(:ControlParameter)
|
136
|
-
end
|
137
|
-
|
138
|
-
it 'reports on case statement' do
|
139
|
-
src = <<-RUBY
|
140
|
-
def alfa(bravo)
|
141
|
-
case bravo
|
142
|
-
when nil then nil
|
143
|
-
else false
|
144
|
-
end
|
145
|
-
end
|
146
|
-
RUBY
|
147
|
-
|
148
|
-
expect(src).to reek_of(:ControlParameter)
|
149
|
-
end
|
150
|
-
|
151
|
-
it 'reports on nested if statements that are both using control parameters' do
|
152
|
-
src = <<-RUBY
|
153
|
-
def nested(bravo)
|
154
|
-
if bravo
|
155
|
-
charlie
|
156
|
-
charlie if bravo
|
157
|
-
end
|
158
|
-
end
|
159
|
-
RUBY
|
160
|
-
|
161
|
-
expect(src).to reek_of(:ControlParameter)
|
162
|
-
end
|
163
|
-
|
164
|
-
it 'reports on nested suffix if statements where the inner if is a control parameter' do
|
165
|
-
src = <<-RUBY
|
166
|
-
def nested(bravo)
|
167
|
-
if true
|
168
|
-
charlie
|
169
|
-
charlie if bravo
|
170
|
-
end
|
171
|
-
end
|
172
|
-
RUBY
|
173
|
-
|
174
|
-
expect(src).to reek_of(:ControlParameter)
|
175
|
-
end
|
176
|
-
|
177
|
-
it 'reports on nested full if statements where the inner if is a control parameter' do
|
178
|
-
src = <<-RUBY
|
179
|
-
def alfa(bravo)
|
180
|
-
if true
|
181
|
-
charlie
|
182
|
-
else
|
183
|
-
if bravo
|
184
|
-
delta
|
185
|
-
end
|
186
|
-
end
|
187
|
-
end
|
188
|
-
RUBY
|
189
|
-
|
190
|
-
expect(src).to reek_of(:ControlParameter)
|
191
|
-
end
|
192
|
-
|
193
|
-
it 'reports on elsif statements' do
|
194
|
-
src = <<-RUBY
|
195
|
-
def alfa(bravo)
|
196
|
-
if true
|
197
|
-
charlie
|
198
|
-
elsif bravo
|
199
|
-
delta
|
200
|
-
end
|
201
|
-
end
|
202
|
-
RUBY
|
203
|
-
|
204
|
-
expect(src).to reek_of(:ControlParameter)
|
205
|
-
end
|
206
|
-
|
207
|
-
it 'reports on explicit comparison in the condition' do
|
208
|
-
src = 'def alfa(bravo); if bravo == charlie then charlie end; end'
|
209
|
-
expect(src).to reek_of(:ControlParameter)
|
210
|
-
end
|
211
|
-
|
212
|
-
it 'reports on explicit negative comparison in the condition' do
|
213
|
-
src = 'def alfa(bravo); if bravo != charlie then charlie end; end'
|
214
|
-
expect(src).to reek_of(:ControlParameter)
|
215
|
-
end
|
216
|
-
|
217
|
-
it 'reports when the argument is compared to a regexp' do
|
218
|
-
src = 'def alfa(bravo); if bravo =~ charlie then charlie end; end'
|
219
|
-
expect(src).to reek_of(:ControlParameter)
|
220
|
-
end
|
221
|
-
|
222
|
-
it 'reports when the argument is reverse-compared to a regexp' do
|
223
|
-
src = 'def alfa(bravo); if /charlie/ =~ bravo then charlie end; end'
|
224
|
-
expect(src).to reek_of(:ControlParameter)
|
225
|
-
end
|
226
|
-
|
227
|
-
it 'reports when the argument is used in a complex regexp' do
|
228
|
-
src = 'def alfa(bravo); if /charlie#{bravo}/ =~ delta then charlie end; end'
|
229
|
-
expect(src).to reek_of(:ControlParameter)
|
230
|
-
end
|
231
|
-
|
232
|
-
it 'reports when the argument is a block parameter' do
|
233
|
-
src = 'def bravo(&charlie); delta(charlie || proc {}); end'
|
234
|
-
expect(src).to reek_of(:ControlParameter)
|
235
|
-
end
|
236
|
-
end
|
237
|
-
|
238
|
-
context 'when a parameter is used besides determining code path' do
|
239
|
-
it 'does not report on if conditional expression' do
|
240
|
-
src = 'def alfa(bravo); if bravo then charlie(bravo); end end'
|
241
|
-
expect(src).not_to reek_of(:ControlParameter)
|
242
|
-
end
|
243
|
-
|
244
|
-
it 'does not report on an if statement modifier' do
|
245
|
-
src = 'def alfa(bravo); charlie(bravo) if bravo; end'
|
246
|
-
expect(src).not_to reek_of(:ControlParameter)
|
247
|
-
end
|
248
|
-
|
249
|
-
it 'does not report on an unless statement modifier' do
|
250
|
-
src = 'def alfa(bravo); charlie(bravo) unless bravo; end'
|
251
|
-
expect(src).not_to reek_of(:ControlParameter)
|
252
|
-
end
|
253
|
-
|
254
|
-
it 'does not report on if control expression with &&' do
|
255
|
-
src = 'def alfa(bravo) if bravo && true then puts bravo end end'
|
256
|
-
expect(src).not_to reek_of(:ControlParameter)
|
257
|
-
end
|
258
|
-
|
259
|
-
it 'does not report on && notation' do
|
260
|
-
src = 'def alfa(bravo); bravo && charlie(bravo); end'
|
261
|
-
expect(src).not_to reek_of(:ControlParameter)
|
262
|
-
end
|
263
|
-
|
264
|
-
it 'does not report on || notation' do
|
265
|
-
src = 'def alfa(bravo); bravo || charlie(bravo) end'
|
266
|
-
expect(src).not_to reek_of(:ControlParameter)
|
267
|
-
end
|
268
|
-
|
269
|
-
it 'does not report when parameter is used outside conditional' do
|
270
|
-
src = 'def alfa(bravo) puts bravo; if bravo then charlie end; end'
|
271
|
-
expect(src).not_to reek_of(:ControlParameter)
|
272
|
-
end
|
273
|
-
|
274
|
-
it 'does not report when parameter is used as a method call argument in a condition' do
|
275
|
-
src = 'def alfa(bravo); if charlie(bravo) then delta end; end'
|
276
|
-
expect(src).not_to reek_of(:ControlParameter)
|
277
|
-
end
|
278
|
-
|
279
|
-
it 'does not report when parameter is used as a method call receiver in a condition' do
|
280
|
-
src = 'def alfa(bravo); if bravo.charlie? then delta end; end'
|
281
|
-
expect(src).not_to reek_of(:ControlParameter)
|
282
|
-
end
|
283
|
-
|
284
|
-
it 'does not report when used in body of control flow operator' do
|
285
|
-
src = <<-RUBY
|
286
|
-
def alfa(bravo)
|
287
|
-
case bravo
|
288
|
-
when :charlie
|
289
|
-
puts 'charlie'
|
290
|
-
else
|
291
|
-
puts 'delta'
|
292
|
-
end
|
293
|
-
echo or foxtrot(bravo)
|
294
|
-
end
|
295
|
-
RUBY
|
296
|
-
|
297
|
-
expect(src).not_to reek_of(:ControlParameter)
|
298
|
-
end
|
299
|
-
end
|
300
|
-
end
|
@@ -1,134 +0,0 @@
|
|
1
|
-
require_relative '../../spec_helper'
|
2
|
-
require_lib 'reek/smell_detectors/data_clump'
|
3
|
-
|
4
|
-
RSpec.describe Reek::SmellDetectors::DataClump do
|
5
|
-
it 'reports the right values' do
|
6
|
-
src = <<-RUBY
|
7
|
-
class Alfa
|
8
|
-
def bravo (echo, foxtrot); end
|
9
|
-
def charlie(echo, foxtrot); end
|
10
|
-
def delta (echo, foxtrot); end
|
11
|
-
end
|
12
|
-
RUBY
|
13
|
-
|
14
|
-
expect(src).to reek_of(:DataClump,
|
15
|
-
lines: [2, 3, 4],
|
16
|
-
context: 'Alfa',
|
17
|
-
message: "takes parameters ['echo', 'foxtrot'] to 3 methods",
|
18
|
-
source: 'string',
|
19
|
-
parameters: ['echo', 'foxtrot'],
|
20
|
-
count: 3)
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'does count all occurences' do
|
24
|
-
src = <<-RUBY
|
25
|
-
class Alfa
|
26
|
-
def bravo (echo, foxtrot); end
|
27
|
-
def charlie(echo, foxtrot); end
|
28
|
-
def delta (echo, foxtrot); end
|
29
|
-
|
30
|
-
def golf (juliett, kilo); end
|
31
|
-
def hotel(juliett, kilo); end
|
32
|
-
def india(juliett, kilo); end
|
33
|
-
end
|
34
|
-
RUBY
|
35
|
-
|
36
|
-
expect(src).
|
37
|
-
to reek_of(:DataClump, lines: [2, 3, 4], parameters: ['echo', 'foxtrot']).
|
38
|
-
and reek_of(:DataClump, lines: [6, 7, 8], parameters: ['juliett', 'kilo'])
|
39
|
-
end
|
40
|
-
|
41
|
-
%w(class module).each do |scope|
|
42
|
-
it "does not report parameter sets < 2 for #{scope}" do
|
43
|
-
src = <<-RUBY
|
44
|
-
#{scope} Alfa
|
45
|
-
def bravo (echo); end
|
46
|
-
def charlie(echo); end
|
47
|
-
def delta (echo); end
|
48
|
-
end
|
49
|
-
RUBY
|
50
|
-
|
51
|
-
expect(src).not_to reek_of(:DataClump)
|
52
|
-
end
|
53
|
-
|
54
|
-
it "does not report less than 3 methods for #{scope}" do
|
55
|
-
src = <<-RUBY
|
56
|
-
#{scope} Alfa
|
57
|
-
def bravo (echo, foxtrot); end
|
58
|
-
def charlie(echo, foxtrot); end
|
59
|
-
end
|
60
|
-
RUBY
|
61
|
-
|
62
|
-
expect(src).not_to reek_of(:DataClump)
|
63
|
-
end
|
64
|
-
|
65
|
-
it 'does not care about the order of arguments' do
|
66
|
-
src = <<-RUBY
|
67
|
-
#{scope} Alfa
|
68
|
-
def bravo (echo, foxtrot); end
|
69
|
-
def charlie(foxtrot, echo); end # <- This is the swapped one!
|
70
|
-
def delta (echo, foxtrot); end
|
71
|
-
end
|
72
|
-
RUBY
|
73
|
-
|
74
|
-
expect(src).to reek_of(:DataClump,
|
75
|
-
count: 3,
|
76
|
-
parameters: ['echo', 'foxtrot'])
|
77
|
-
end
|
78
|
-
|
79
|
-
it 'reports arguments in alphabetical order even if they are never used that way' do
|
80
|
-
src = <<-RUBY
|
81
|
-
#{scope} Alfa
|
82
|
-
def bravo (foxtrot, echo); end
|
83
|
-
def charlie(foxtrot, echo); end
|
84
|
-
def delta (foxtrot, echo); end
|
85
|
-
end
|
86
|
-
RUBY
|
87
|
-
|
88
|
-
expect(src).to reek_of(:DataClump,
|
89
|
-
count: 3,
|
90
|
-
parameters: ['echo', 'foxtrot'])
|
91
|
-
end
|
92
|
-
|
93
|
-
it 'reports parameter sets that are > 2' do
|
94
|
-
src = <<-RUBY
|
95
|
-
#{scope} Alfa
|
96
|
-
def bravo (echo, foxtrot, golf); end
|
97
|
-
def charlie(echo, foxtrot, golf); end
|
98
|
-
def delta (echo, foxtrot, golf); end
|
99
|
-
end
|
100
|
-
RUBY
|
101
|
-
|
102
|
-
expect(src).to reek_of(:DataClump,
|
103
|
-
count: 3,
|
104
|
-
parameters: ['echo', 'foxtrot', 'golf'])
|
105
|
-
end
|
106
|
-
|
107
|
-
it 'detects clumps smaller than the total number of parameters' do
|
108
|
-
src = <<-RUBY
|
109
|
-
# Total number of parameters is 3 but the clump size is 2.
|
110
|
-
#{scope} Alfa
|
111
|
-
def bravo (echo, foxtrot, golf); end
|
112
|
-
def charlie(echo, golf, foxtrot); end
|
113
|
-
def delta (hotel, echo, foxtrot); end
|
114
|
-
end
|
115
|
-
RUBY
|
116
|
-
|
117
|
-
expect(src).to reek_of(:DataClump,
|
118
|
-
parameters: ['echo', 'foxtrot'])
|
119
|
-
end
|
120
|
-
|
121
|
-
it 'ignores anonymous parameters' do
|
122
|
-
src = <<-RUBY
|
123
|
-
#{scope} Alfa
|
124
|
-
def bravo (echo, foxtrot, *); end
|
125
|
-
def charlie(echo, foxtrot, *); end
|
126
|
-
def delta (echo, foxtrot, *); end
|
127
|
-
end
|
128
|
-
RUBY
|
129
|
-
|
130
|
-
expect(src).to reek_of(:DataClump,
|
131
|
-
parameters: ['echo', 'foxtrot'])
|
132
|
-
end
|
133
|
-
end
|
134
|
-
end
|