reek 6.0.2 → 6.2.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/.github/dependabot.yml +13 -0
- data/.github/workflows/ruby.yml +57 -0
- data/.rubocop.yml +6 -12
- data/.rubocop_todo.yml +6 -4
- data/CHANGELOG.md +95 -0
- data/CONTRIBUTING.md +10 -10
- data/Dockerfile +1 -1
- data/Gemfile +8 -7
- data/README.md +29 -29
- data/bin/code_climate_reek +56 -8
- data/lib/reek/ast/ast_node_class_map.rb +1 -1
- data/lib/reek/ast/node.rb +1 -1
- data/lib/reek/ast/sexp_extensions/arguments.rb +20 -0
- data/lib/reek/ast/sexp_extensions/case.rb +1 -1
- data/lib/reek/ast/sexp_extensions/if.rb +1 -1
- data/lib/reek/ast/sexp_extensions/send.rb +22 -7
- data/lib/reek/cli/command/todo_list_command.rb +3 -3
- data/lib/reek/cli/options.rb +6 -6
- data/lib/reek/{report/code_climate → code_climate}/code_climate_configuration.rb +1 -1
- data/lib/reek/{report/code_climate → code_climate}/code_climate_configuration.yml +41 -41
- data/lib/reek/{report/code_climate → code_climate}/code_climate_fingerprint.rb +2 -2
- data/lib/reek/{report/code_climate → code_climate}/code_climate_formatter.rb +2 -4
- data/lib/reek/{report/code_climate → code_climate}/code_climate_report.rb +3 -3
- data/lib/reek/code_comment.rb +25 -20
- data/lib/reek/configuration/app_configuration.rb +5 -5
- data/lib/reek/configuration/configuration_converter.rb +1 -1
- data/lib/reek/configuration/configuration_file_finder.rb +5 -4
- data/lib/reek/configuration/default_directive.rb +1 -1
- data/lib/reek/configuration/directory_directives.rb +1 -1
- data/lib/reek/configuration/excluded_paths.rb +3 -2
- data/lib/reek/configuration/schema.rb +177 -0
- data/lib/reek/configuration/schema_validator.rb +12 -13
- data/lib/reek/context/attribute_context.rb +1 -1
- data/lib/reek/context/code_context.rb +1 -1
- data/lib/reek/context/method_context.rb +1 -1
- data/lib/reek/context/module_context.rb +4 -0
- data/lib/reek/context/refinement_context.rb +16 -0
- data/lib/reek/context/send_context.rb +7 -1
- data/lib/reek/context_builder.rb +17 -3
- data/lib/reek/documentation_link.rb +3 -5
- data/lib/reek/errors/bad_detector_configuration_key_in_comment_error.rb +2 -2
- data/lib/reek/errors/bad_detector_in_comment_error.rb +2 -2
- data/lib/reek/errors/encoding_error.rb +1 -1
- data/lib/reek/errors/garbage_detector_configuration_in_comment_error.rb +2 -2
- data/lib/reek/errors/incomprehensible_source_error.rb +1 -1
- data/lib/reek/errors/legacy_comment_separator_error.rb +2 -2
- data/lib/reek/errors/syntax_error.rb +1 -1
- data/lib/reek/rake/task.rb +5 -5
- data/lib/reek/smell_detectors/base_detector.rb +1 -1
- data/lib/reek/smell_detectors/class_variable.rb +2 -2
- data/lib/reek/smell_detectors/control_parameter_helpers/candidate.rb +6 -6
- data/lib/reek/smell_detectors/control_parameter_helpers/control_parameter_finder.rb +1 -1
- data/lib/reek/smell_detectors/duplicate_method_call.rb +5 -5
- data/lib/reek/smell_detectors/instance_variable_assumption.rb +8 -8
- data/lib/reek/smell_detectors/nested_iterators.rb +4 -3
- data/lib/reek/smell_detectors/unused_private_method.rb +3 -2
- data/lib/reek/smell_warning.rb +1 -1
- data/lib/reek/source/source_locator.rb +1 -3
- data/lib/reek/spec/should_reek_of.rb +11 -9
- data/lib/reek/spec.rb +1 -1
- data/lib/reek/version.rb +2 -2
- data/reek.gemspec +29 -25
- metadata +37 -250
- data/.travis.yml +0 -40
- 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 -37
- 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/lib/reek/configuration/schema.yml +0 -210
- 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 -16
- 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 -293
- 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
- /data/lib/reek/{report/code_climate.rb → code_climate.rb} +0 -0
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
Feature: Exclude paths directives
|
|
2
|
-
In order to avoid Reek wasting time on files that cannot be fixed
|
|
3
|
-
As a user
|
|
4
|
-
I want to be able to exclude specific paths from being checked
|
|
5
|
-
|
|
6
|
-
Scenario: Exclude paths
|
|
7
|
-
Given the smelly file "smelly.rb" in the directory "smelly_sources"
|
|
8
|
-
And the smelly file "smelly.rb" in the directory "smelly_as_well"
|
|
9
|
-
And the smelly file "smelly.rb" in the directory "smelly_as_well_2"
|
|
10
|
-
When I run reek .
|
|
11
|
-
Then the exit status indicates smells
|
|
12
|
-
Given a file named "config.reek" with:
|
|
13
|
-
"""
|
|
14
|
-
---
|
|
15
|
-
exclude_paths:
|
|
16
|
-
- smelly_sources/smelly.rb
|
|
17
|
-
- smelly_as_well/
|
|
18
|
-
- smelly_as_well_2
|
|
19
|
-
"""
|
|
20
|
-
When I run reek -c config.reek .
|
|
21
|
-
Then it succeeds
|
|
22
|
-
And it reports nothing
|
|
23
|
-
|
|
24
|
-
Scenario: Using a file name within an excluded directory
|
|
25
|
-
Given a file named "bad_files_live_here/smelly.rb" with:
|
|
26
|
-
"""
|
|
27
|
-
# A smelly example class
|
|
28
|
-
class Smelly
|
|
29
|
-
def alfa(bravo); end
|
|
30
|
-
end
|
|
31
|
-
"""
|
|
32
|
-
And a file named "config.reek" with:
|
|
33
|
-
"""
|
|
34
|
-
---
|
|
35
|
-
exclude_paths:
|
|
36
|
-
- bad_files_live_here
|
|
37
|
-
"""
|
|
38
|
-
When I run reek -c config.reek bad_files_live_here/smelly.rb
|
|
39
|
-
Then the exit status indicates smells
|
|
40
|
-
When I run reek -c config.reek --force-exclusion bad_files_live_here/smelly.rb
|
|
41
|
-
Then it succeeds
|
|
42
|
-
And it reports nothing
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
Feature: Masking smells using config files
|
|
2
|
-
In order to keep my reports meaningful
|
|
3
|
-
As a developer
|
|
4
|
-
I want to mask some smells using config files
|
|
5
|
-
|
|
6
|
-
Scenario: corrupt config file prevents normal output
|
|
7
|
-
Given the smelly file 'smelly.rb'
|
|
8
|
-
And a configuration file 'corrupt.reek'
|
|
9
|
-
When I run reek -c corrupt.reek smelly.rb
|
|
10
|
-
And stderr reports:
|
|
11
|
-
"""
|
|
12
|
-
Error: We found some problems with your configuration file: [/] 'Not a valid configuration file': not a mapping.
|
|
13
|
-
"""
|
|
14
|
-
And the exit status indicates an error
|
|
15
|
-
And it reports nothing
|
|
16
|
-
|
|
17
|
-
Scenario: missing source file is an error
|
|
18
|
-
When I run reek not_here.rb
|
|
19
|
-
Then it reports the error "Error: No such file - not_here.rb"
|
|
20
|
-
|
|
21
|
-
Scenario: masking smells in the configuration file
|
|
22
|
-
Given the smelly file 'smelly.rb'
|
|
23
|
-
And a configuration file 'full_mask.reek'
|
|
24
|
-
When I run reek -c full_mask.reek smelly.rb
|
|
25
|
-
Then it succeeds
|
|
26
|
-
And it reports nothing
|
|
27
|
-
|
|
28
|
-
Scenario: allow masking some calls for duplication smell
|
|
29
|
-
Given the smelly file 'smelly.rb'
|
|
30
|
-
And a configuration file 'partial_mask.reek'
|
|
31
|
-
When I run reek -c partial_mask.reek smelly.rb
|
|
32
|
-
Then the exit status indicates smells
|
|
33
|
-
And it reports:
|
|
34
|
-
"""
|
|
35
|
-
smelly.rb -- 1 warning:
|
|
36
|
-
[5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
|
|
37
|
-
"""
|
|
38
|
-
|
|
39
|
-
Scenario: provide extra masking inline in comments
|
|
40
|
-
Given a file named "smelly_with_inline_mask.rb" with:
|
|
41
|
-
"""
|
|
42
|
-
# Smelly class
|
|
43
|
-
# disables :reek:UncommunicativeVariableName
|
|
44
|
-
class Smelly
|
|
45
|
-
# This will reek of UncommunicativeMethodName
|
|
46
|
-
def x
|
|
47
|
-
y = 10 # This will NOT reek of UncommunicativeVariableName
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
"""
|
|
51
|
-
And a configuration file 'partial_mask.reek'
|
|
52
|
-
When I run reek -c partial_mask.reek smelly_with_inline_mask.rb
|
|
53
|
-
Then it succeeds
|
|
54
|
-
And it reports nothing
|
|
55
|
-
|
|
56
|
-
Scenario: empty config file outputs normally
|
|
57
|
-
Given the smelly file 'smelly.rb'
|
|
58
|
-
And a configuration file 'empty.reek'
|
|
59
|
-
When I run reek -c empty.reek smelly.rb
|
|
60
|
-
Then the exit status indicates smells
|
|
61
|
-
And it reports:
|
|
62
|
-
"""
|
|
63
|
-
smelly.rb -- 2 warnings:
|
|
64
|
-
[4]:UncommunicativeMethodName: Smelly#x has the name 'x'
|
|
65
|
-
[5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
|
|
66
|
-
"""
|
|
67
|
-
|
|
68
|
-
Scenario: Disable UtilityFunction for non-public methods
|
|
69
|
-
Given a file named "smelly_with_modifiers.rb" with:
|
|
70
|
-
"""
|
|
71
|
-
# Smelly class for testing purposes
|
|
72
|
-
class Klass
|
|
73
|
-
def public_method(arg) arg.to_s; end
|
|
74
|
-
protected
|
|
75
|
-
def protected_method(arg) arg.to_s; end
|
|
76
|
-
private
|
|
77
|
-
def private_method(arg) arg.to_s; end
|
|
78
|
-
end
|
|
79
|
-
"""
|
|
80
|
-
And a file named "non_public_modifiers_mask.reek.yml" with:
|
|
81
|
-
"""
|
|
82
|
-
---
|
|
83
|
-
detectors:
|
|
84
|
-
UtilityFunction:
|
|
85
|
-
public_methods_only: true
|
|
86
|
-
"""
|
|
87
|
-
When I run reek -c non_public_modifiers_mask.reek.yml smelly_with_modifiers.rb
|
|
88
|
-
Then the exit status indicates smells
|
|
89
|
-
And it reports:
|
|
90
|
-
"""
|
|
91
|
-
smelly_with_modifiers.rb -- 1 warning:
|
|
92
|
-
[3]:UtilityFunction: Klass#public_method doesn't depend on instance state (maybe move it to another class?)
|
|
93
|
-
"""
|
|
94
|
-
But it does not report private or protected methods
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
Feature: Mix `accept` and `reject` configuration settings
|
|
2
|
-
In order to have a more fine-grained control over what Reek reports
|
|
3
|
-
As a user
|
|
4
|
-
I want to be able to mix the `accept` and `reject` setting
|
|
5
|
-
|
|
6
|
-
Scenario: UncommunicativeMethodName
|
|
7
|
-
Given a file named "config.reek" with:
|
|
8
|
-
"""
|
|
9
|
-
---
|
|
10
|
-
detectors:
|
|
11
|
-
UncommunicativeMethodName:
|
|
12
|
-
accept:
|
|
13
|
-
- x
|
|
14
|
-
- meth1
|
|
15
|
-
reject:
|
|
16
|
-
- helper
|
|
17
|
-
- foobar
|
|
18
|
-
"""
|
|
19
|
-
And a file named "smelly.rb" with:
|
|
20
|
-
"""
|
|
21
|
-
def x; end # Should not be reported
|
|
22
|
-
def meth1; end # Should not be reported
|
|
23
|
-
def foobar; end # Should be reported
|
|
24
|
-
def awesome_helper; end # Should be reported
|
|
25
|
-
"""
|
|
26
|
-
When I run reek -c config.reek smelly.rb
|
|
27
|
-
Then it reports:
|
|
28
|
-
"""
|
|
29
|
-
smelly.rb -- 2 warnings:
|
|
30
|
-
[4]:UncommunicativeMethodName: awesome_helper has the name 'awesome_helper'
|
|
31
|
-
[3]:UncommunicativeMethodName: foobar has the name 'foobar'
|
|
32
|
-
"""
|
|
33
|
-
|
|
34
|
-
Scenario: UncommunicativeModuleName
|
|
35
|
-
Given a file named "config.reek" with:
|
|
36
|
-
"""
|
|
37
|
-
---
|
|
38
|
-
detectors:
|
|
39
|
-
IrresponsibleModule:
|
|
40
|
-
enabled: false
|
|
41
|
-
UncommunicativeModuleName:
|
|
42
|
-
accept:
|
|
43
|
-
- lassy
|
|
44
|
-
- M
|
|
45
|
-
reject:
|
|
46
|
-
- Helper
|
|
47
|
-
"""
|
|
48
|
-
And a file named "smelly.rb" with:
|
|
49
|
-
"""
|
|
50
|
-
class Classy1; end # Should not be reported
|
|
51
|
-
class M; end # Should not be reported
|
|
52
|
-
class BaseHelper; end # Should be reported
|
|
53
|
-
"""
|
|
54
|
-
When I run reek -c config.reek smelly.rb
|
|
55
|
-
Then it reports:
|
|
56
|
-
"""
|
|
57
|
-
smelly.rb -- 1 warning:
|
|
58
|
-
[3]:UncommunicativeModuleName: BaseHelper has the name 'BaseHelper'
|
|
59
|
-
"""
|
|
60
|
-
|
|
61
|
-
Scenario: UncommunicativeParameterName
|
|
62
|
-
Given a file named "config.reek" with:
|
|
63
|
-
"""
|
|
64
|
-
---
|
|
65
|
-
detectors:
|
|
66
|
-
UncommunicativeParameterName:
|
|
67
|
-
accept:
|
|
68
|
-
- x
|
|
69
|
-
- arg1
|
|
70
|
-
reject:
|
|
71
|
-
- foobar
|
|
72
|
-
"""
|
|
73
|
-
And a file named "smelly.rb" with:
|
|
74
|
-
"""
|
|
75
|
-
def omg(x); x; end # Should not be reported
|
|
76
|
-
def omg(arg1); arg1; end # Should not be reported
|
|
77
|
-
def omg(foobar); foobar; end # Should be reported
|
|
78
|
-
"""
|
|
79
|
-
When I run reek -c config.reek smelly.rb
|
|
80
|
-
Then it reports:
|
|
81
|
-
"""
|
|
82
|
-
smelly.rb -- 1 warning:
|
|
83
|
-
[3]:UncommunicativeParameterName: omg has the parameter name 'foobar'
|
|
84
|
-
"""
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
Feature: `reject` configuration setting
|
|
2
|
-
In order to have a more fine-grained control over what Reek reports
|
|
3
|
-
As a user
|
|
4
|
-
I want to be able to reject specific patterns and names to include them into reporting
|
|
5
|
-
|
|
6
|
-
Scenario: reject names
|
|
7
|
-
Given a file named "config.reek" with:
|
|
8
|
-
"""
|
|
9
|
-
---
|
|
10
|
-
detectors:
|
|
11
|
-
UncommunicativeMethodName:
|
|
12
|
-
reject:
|
|
13
|
-
- awesome_helper
|
|
14
|
-
- little_helper
|
|
15
|
-
UncommunicativeParameterName:
|
|
16
|
-
reject:
|
|
17
|
-
- solid_argument
|
|
18
|
-
- nifty_argument
|
|
19
|
-
UncommunicativeModuleName:
|
|
20
|
-
reject:
|
|
21
|
-
- Dummy
|
|
22
|
-
UncommunicativeVariableName:
|
|
23
|
-
reject:
|
|
24
|
-
- fine_name
|
|
25
|
-
"""
|
|
26
|
-
And a file named "smelly.rb" with:
|
|
27
|
-
"""
|
|
28
|
-
# Should report UncommunicativeModuleName
|
|
29
|
-
class Dummy
|
|
30
|
-
# Should report UncommunicativeMethodName and UncommunicativeParameterName
|
|
31
|
-
def awesome_helper(solid_argument); solid_argument; end
|
|
32
|
-
# Should report UncommunicativeMethodName and UncommunicativeParameterName
|
|
33
|
-
def little_helper(nifty_argument); nifty_argument; end
|
|
34
|
-
# Should not report UncommunicativeMethodName and UncommunicativeParameterName
|
|
35
|
-
def meth(argument); argument; end
|
|
36
|
-
fine_name = 2 # Should report UncommunicativeMethodName
|
|
37
|
-
other_name = 2 # Should not report UncommunicativeMethodName
|
|
38
|
-
end
|
|
39
|
-
"""
|
|
40
|
-
When I run reek -c config.reek smelly.rb
|
|
41
|
-
Then it reports:
|
|
42
|
-
"""
|
|
43
|
-
smelly.rb -- 6 warnings:
|
|
44
|
-
[4]:UncommunicativeMethodName: Dummy#awesome_helper has the name 'awesome_helper'
|
|
45
|
-
[6]:UncommunicativeMethodName: Dummy#little_helper has the name 'little_helper'
|
|
46
|
-
[2]:UncommunicativeModuleName: Dummy has the name 'Dummy'
|
|
47
|
-
[4]:UncommunicativeParameterName: Dummy#awesome_helper has the parameter name 'solid_argument'
|
|
48
|
-
[6]:UncommunicativeParameterName: Dummy#little_helper has the parameter name 'nifty_argument'
|
|
49
|
-
[9]:UncommunicativeVariableName: Dummy has the variable name 'fine_name'
|
|
50
|
-
"""
|
|
51
|
-
|
|
52
|
-
Scenario: Reject regexes
|
|
53
|
-
Given a file named "config.reek" with:
|
|
54
|
-
"""
|
|
55
|
-
---
|
|
56
|
-
detectors:
|
|
57
|
-
UncommunicativeMethodName:
|
|
58
|
-
accept:
|
|
59
|
-
- /oobar/
|
|
60
|
-
UncommunicativeParameterName:
|
|
61
|
-
accept:
|
|
62
|
-
- /ola/
|
|
63
|
-
UncommunicativeModuleName:
|
|
64
|
-
accept:
|
|
65
|
-
- /lassy/
|
|
66
|
-
UncommunicativeVariableName:
|
|
67
|
-
reject:
|
|
68
|
-
- /^fine_name/
|
|
69
|
-
"""
|
|
70
|
-
And a file named "smelly.rb" with:
|
|
71
|
-
"""
|
|
72
|
-
# Should not report UncommunicativeModuleName
|
|
73
|
-
class Classy1
|
|
74
|
-
# Should not report UncommunicativeMethodName and UncommunicativeParameterName
|
|
75
|
-
def foobar1(hola1); hola1; end
|
|
76
|
-
# Should report UncommunicativeMethodName and UncommunicativeParameterName
|
|
77
|
-
def m2(a2); a2; end
|
|
78
|
-
fine_name = 2 # Should report UncommunicativeMethodName
|
|
79
|
-
my_fine_name = 2 # Should not report UncommunicativeMethodName
|
|
80
|
-
end
|
|
81
|
-
"""
|
|
82
|
-
When I run reek -c config.reek smelly.rb
|
|
83
|
-
Then it reports:
|
|
84
|
-
"""
|
|
85
|
-
smelly.rb -- 3 warnings:
|
|
86
|
-
[6]:UncommunicativeMethodName: Classy1#m2 has the name 'm2'
|
|
87
|
-
[6]:UncommunicativeParameterName: Classy1#m2 has the parameter name 'a2'
|
|
88
|
-
[7]:UncommunicativeVariableName: Classy1 has the variable name 'fine_name'
|
|
89
|
-
"""
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
Feature: Validate schema
|
|
2
|
-
In order to ensure that I am using the right configuration
|
|
3
|
-
As a user
|
|
4
|
-
I want to be notified when I am using a configuration that violates our schema
|
|
5
|
-
|
|
6
|
-
Scenario: Our generated default configuration
|
|
7
|
-
Given our default configuration file
|
|
8
|
-
And the clean file "clean.rb"
|
|
9
|
-
When I run reek -c defaults.reek.yml clean.rb
|
|
10
|
-
Then it succeeds
|
|
11
|
-
And it reports nothing
|
|
12
|
-
|
|
13
|
-
Scenario: Detectors, directories and exclude paths all mixed
|
|
14
|
-
Given a file named "config.reek" with:
|
|
15
|
-
"""
|
|
16
|
-
---
|
|
17
|
-
detectors:
|
|
18
|
-
IrresponsibleModule:
|
|
19
|
-
enabled: false
|
|
20
|
-
NestedIterators:
|
|
21
|
-
exclude:
|
|
22
|
-
- "MyWorker#self.class_method"
|
|
23
|
-
- "AnotherWorker#instance_method"
|
|
24
|
-
DataClump:
|
|
25
|
-
max_copies: 3
|
|
26
|
-
min_clump_size: 3
|
|
27
|
-
|
|
28
|
-
directories:
|
|
29
|
-
"web_app/app/controllers":
|
|
30
|
-
NestedIterators:
|
|
31
|
-
enabled: false
|
|
32
|
-
"web_app/app/helpers":
|
|
33
|
-
UtilityFunction:
|
|
34
|
-
enabled: false
|
|
35
|
-
|
|
36
|
-
exclude_paths:
|
|
37
|
-
- lib/legacy
|
|
38
|
-
"""
|
|
39
|
-
And a directory named "lib/legacy"
|
|
40
|
-
And the clean file "clean.rb"
|
|
41
|
-
When I run reek -c config.reek clean.rb
|
|
42
|
-
Then it succeeds
|
|
43
|
-
And it reports nothing
|
|
44
|
-
|
|
45
|
-
Scenario: Invalid detector name
|
|
46
|
-
Given a file named "config.reek" with:
|
|
47
|
-
"""
|
|
48
|
-
---
|
|
49
|
-
detectors:
|
|
50
|
-
DoesNotExist:
|
|
51
|
-
enabled: true
|
|
52
|
-
"""
|
|
53
|
-
And the clean file "clean.rb"
|
|
54
|
-
When I run reek -c config.reek clean.rb
|
|
55
|
-
Then the exit status indicates an error
|
|
56
|
-
And stderr reports:
|
|
57
|
-
"""
|
|
58
|
-
Error: We found some problems with your configuration file: [/detectors/DoesNotExist] key 'DoesNotExist:' is undefined.
|
|
59
|
-
"""
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
Feature: Show configuration file
|
|
2
|
-
With Reeks dynamic mechanism of finding a configuration file you might run into a situation where you are not
|
|
3
|
-
100% sure what configuration file Reek is using. E.g. you have a project specific configuration file in your
|
|
4
|
-
project root and also another Reek configuration in your HOME directory that you use for all your other projects
|
|
5
|
-
and for whatever reasons Reek seems to be using another configuration file than the one you assumed it would.
|
|
6
|
-
In this case you can pass the flag `--show-configuration-path` to Reek which will cause Reek to output the path
|
|
7
|
-
to the configuration file it is using.
|
|
8
|
-
|
|
9
|
-
Scenario: Default configuration file present
|
|
10
|
-
Given the clean file "clean.rb"
|
|
11
|
-
And an empty file named ".reek.yml"
|
|
12
|
-
When I run reek --show-configuration-path clean.rb
|
|
13
|
-
Then it reports:
|
|
14
|
-
"""
|
|
15
|
-
Using '.reek.yml' as configuration file.
|
|
16
|
-
"""
|
|
17
|
-
|
|
18
|
-
Scenario: Non-default configuration file passed via CLI
|
|
19
|
-
Given the clean file "clean.rb"
|
|
20
|
-
And an empty file named "config.reek"
|
|
21
|
-
When I run reek --show-configuration-path -c config.reek clean.rb
|
|
22
|
-
Then it reports:
|
|
23
|
-
"""
|
|
24
|
-
Using 'config.reek' as configuration file.
|
|
25
|
-
"""
|
|
26
|
-
|
|
27
|
-
Scenario: Display the right configuration file even when there are multiple files present
|
|
28
|
-
Given the clean file "clean.rb"
|
|
29
|
-
And an empty file named ".reek.yml"
|
|
30
|
-
And an empty file named "config.reek"
|
|
31
|
-
When I run reek --show-configuration-path -c config.reek clean.rb
|
|
32
|
-
Then it reports:
|
|
33
|
-
"""
|
|
34
|
-
Using 'config.reek' as configuration file.
|
|
35
|
-
"""
|
|
36
|
-
|
|
37
|
-
Scenario: Use configuration file we find when traversing up the directory tree
|
|
38
|
-
Given the clean file "clean.rb"
|
|
39
|
-
And with a configuration file that is further up in the directory tree
|
|
40
|
-
When I run reek --show-configuration-path clean.rb
|
|
41
|
-
Then it reports:
|
|
42
|
-
"""
|
|
43
|
-
Using '../../.reek.yml' as configuration file.
|
|
44
|
-
"""
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
Feature: Unused Private Method detector
|
|
2
|
-
This detector is a little special in the sense that it takes class contexts but analyzes
|
|
3
|
-
methods (and thus, is configured in regards to methods) so we need to make sure
|
|
4
|
-
that our configuration handling still works.
|
|
5
|
-
|
|
6
|
-
Scenario: Differentiate between contexts when excluding them
|
|
7
|
-
Given a file named "config.reek" with:
|
|
8
|
-
"""
|
|
9
|
-
---
|
|
10
|
-
detectors:
|
|
11
|
-
IrresponsibleModule:
|
|
12
|
-
enabled: false
|
|
13
|
-
UnusedPrivateMethod:
|
|
14
|
-
enabled: true
|
|
15
|
-
exclude:
|
|
16
|
-
- Outer::Awesome#foobar
|
|
17
|
-
"""
|
|
18
|
-
And a file named "sample.rb" with:
|
|
19
|
-
"""
|
|
20
|
-
module Outer
|
|
21
|
-
class Smelly
|
|
22
|
-
private
|
|
23
|
-
def foobar; end # Should report UnusedPrivateMethod
|
|
24
|
-
end
|
|
25
|
-
class Awesome
|
|
26
|
-
private
|
|
27
|
-
def foobar; end # Should not report UnusedPrivateMethod
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
"""
|
|
31
|
-
When I run reek -c config.reek sample.rb
|
|
32
|
-
Then it reports:
|
|
33
|
-
"""
|
|
34
|
-
sample.rb -- 1 warning:
|
|
35
|
-
[4]:UnusedPrivateMethod: Outer::Smelly has the unused private instance method 'foobar'
|
|
36
|
-
"""
|
|
37
|
-
|
|
38
|
-
Scenario: Use regexes for excluding contexts
|
|
39
|
-
Given a file named "config.reek" with:
|
|
40
|
-
"""
|
|
41
|
-
---
|
|
42
|
-
detectors:
|
|
43
|
-
IrresponsibleModule:
|
|
44
|
-
enabled: false
|
|
45
|
-
UnusedPrivateMethod:
|
|
46
|
-
enabled: true
|
|
47
|
-
exclude:
|
|
48
|
-
- wesome#foo
|
|
49
|
-
"""
|
|
50
|
-
And a file named "sample.rb" with:
|
|
51
|
-
"""
|
|
52
|
-
module Outer
|
|
53
|
-
class Smelly
|
|
54
|
-
private
|
|
55
|
-
def foobar; end # Should report UnusedPrivateMethod
|
|
56
|
-
end
|
|
57
|
-
class Awesome
|
|
58
|
-
private
|
|
59
|
-
def foobar; end # Should not report UnusedPrivateMethod
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
"""
|
|
63
|
-
When I run reek -c config.reek sample.rb
|
|
64
|
-
Then it reports:
|
|
65
|
-
"""
|
|
66
|
-
sample.rb -- 1 warning:
|
|
67
|
-
[4]:UnusedPrivateMethod: Outer::Smelly has the unused private instance method 'foobar'
|
|
68
|
-
"""
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
Feature: Offer different ways how to load configuration
|
|
2
|
-
|
|
3
|
-
Reek can be configured in two ways:
|
|
4
|
-
- Using the cli "-c" switch to pass a configuration file on the command line.
|
|
5
|
-
- Having a Reek configuration file that is automatically found. Reek will
|
|
6
|
-
look for a file ending in .reek.yml in the following places, in order:
|
|
7
|
-
- The current working directory
|
|
8
|
-
- The working directory's ancestor directories, traversing all the way up
|
|
9
|
-
to the root.
|
|
10
|
-
- Your HOME directory
|
|
11
|
-
Reek will check these in order and stop after the first file found.
|
|
12
|
-
|
|
13
|
-
Scenario: Default configuration
|
|
14
|
-
Given the smelly file 'smelly.rb'
|
|
15
|
-
When I run reek smelly.rb
|
|
16
|
-
Then the exit status indicates smells
|
|
17
|
-
And it reports:
|
|
18
|
-
"""
|
|
19
|
-
smelly.rb -- 2 warnings:
|
|
20
|
-
[4]:UncommunicativeMethodName: Smelly#x has the name 'x'
|
|
21
|
-
[5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
|
|
22
|
-
"""
|
|
23
|
-
|
|
24
|
-
Scenario: Configuration via CLI
|
|
25
|
-
Given the smelly file 'smelly.rb'
|
|
26
|
-
And a configuration file 'full_mask.reek'
|
|
27
|
-
When I run reek -c full_mask.reek smelly.rb
|
|
28
|
-
Then it reports no errors
|
|
29
|
-
And it succeeds
|
|
30
|
-
|
|
31
|
-
Scenario: Configuration file in working directory
|
|
32
|
-
Given the smelly file 'smelly.rb'
|
|
33
|
-
And a file named ".reek.yml" with:
|
|
34
|
-
"""
|
|
35
|
-
---
|
|
36
|
-
detectors:
|
|
37
|
-
UncommunicativeMethodName:
|
|
38
|
-
enabled: false
|
|
39
|
-
UncommunicativeVariableName:
|
|
40
|
-
enabled: false
|
|
41
|
-
"""
|
|
42
|
-
When I run reek smelly.rb
|
|
43
|
-
Then it reports no errors
|
|
44
|
-
And it succeeds
|
|
45
|
-
|
|
46
|
-
Scenario: Do not use the default config file when we explicitly specify one configuration file
|
|
47
|
-
Given the smelly file 'smelly.rb'
|
|
48
|
-
And a file named "config.reek" with:
|
|
49
|
-
"""
|
|
50
|
-
---
|
|
51
|
-
detectors:
|
|
52
|
-
UncommunicativeMethodName:
|
|
53
|
-
enabled: false
|
|
54
|
-
"""
|
|
55
|
-
And a file named ".reek.yml" with:
|
|
56
|
-
"""
|
|
57
|
-
---
|
|
58
|
-
UncommunicativeVariableName:
|
|
59
|
-
enabled: false
|
|
60
|
-
"""
|
|
61
|
-
When I run reek -c config.reek smelly.rb
|
|
62
|
-
Then the exit status indicates smells
|
|
63
|
-
And it reports:
|
|
64
|
-
"""
|
|
65
|
-
smelly.rb -- 1 warning:
|
|
66
|
-
[5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
|
|
67
|
-
"""
|
|
68
|
-
|
|
69
|
-
Scenario: Prefer the default config file over other configuration files
|
|
70
|
-
Given the smelly file 'smelly.rb'
|
|
71
|
-
And a file named "config.reek" with:
|
|
72
|
-
"""
|
|
73
|
-
---
|
|
74
|
-
detectors:
|
|
75
|
-
UncommunicativeMethodName:
|
|
76
|
-
enabled: false
|
|
77
|
-
"""
|
|
78
|
-
And a file named ".reek.yml" with:
|
|
79
|
-
"""
|
|
80
|
-
---
|
|
81
|
-
detectors:
|
|
82
|
-
UncommunicativeVariableName:
|
|
83
|
-
enabled: false
|
|
84
|
-
"""
|
|
85
|
-
When I run reek smelly.rb
|
|
86
|
-
Then the exit status indicates smells
|
|
87
|
-
And it reports:
|
|
88
|
-
"""
|
|
89
|
-
smelly.rb -- 1 warning:
|
|
90
|
-
[4]:UncommunicativeMethodName: Smelly#x has the name 'x'
|
|
91
|
-
"""
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
Feature: Erroneous source comments are handled properly
|
|
2
|
-
Erroneous source comments should be handled in a way that is intuitive and helpful
|
|
3
|
-
for the user. Reek should neither crash nor silently swallow it.
|
|
4
|
-
If there is something wrong - no matter how small it is - Reek should report it back
|
|
5
|
-
to the user right away so the user can actually do something about it.
|
|
6
|
-
If a user tries to deactivate an unknown smell detector (e.g. because he made a typo)
|
|
7
|
-
we should just skip this file and tell the user about it so he can fix it and then
|
|
8
|
-
re-run Reek.
|
|
9
|
-
|
|
10
|
-
Scenario: Unknown smell detector
|
|
11
|
-
Given a file named "bad_comment.rb" with:
|
|
12
|
-
"""
|
|
13
|
-
# Test class
|
|
14
|
-
# :reek:UnknownDetectorName
|
|
15
|
-
def x
|
|
16
|
-
end
|
|
17
|
-
"""
|
|
18
|
-
When I run reek bad_comment.rb
|
|
19
|
-
Then it reports the error "Error: You are trying to configure an unknown smell detector 'UnknownDetectorName'"
|
|
20
|
-
|
|
21
|
-
Scenario: One good file, one bad file
|
|
22
|
-
Given a file named "bad_comment.rb" with:
|
|
23
|
-
"""
|
|
24
|
-
# Test class
|
|
25
|
-
# :reek:UnknownDetectorName
|
|
26
|
-
def x
|
|
27
|
-
end
|
|
28
|
-
"""
|
|
29
|
-
Given the smelly file 'smelly.rb'
|
|
30
|
-
When I run reek bad_comment.rb smelly.rb
|
|
31
|
-
Then it reports the error "Error: You are trying to configure an unknown smell detector 'UnknownDetectorName'"
|
|
32
|
-
And the exit status indicates smells
|
|
33
|
-
And it reports:
|
|
34
|
-
"""
|
|
35
|
-
smelly.rb -- 2 warnings:
|
|
36
|
-
[4]:UncommunicativeMethodName: Smelly#x has the name 'x'
|
|
37
|
-
[5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
|
|
38
|
-
2 total warnings
|
|
39
|
-
"""
|
|
40
|
-
|
|
41
|
-
Scenario: Garbage as content
|
|
42
|
-
Given a file named "bad_comment.rb" with:
|
|
43
|
-
"""
|
|
44
|
-
# Test class
|
|
45
|
-
# :reek:UncommunicativeMethodName { thats: a: bad: config }
|
|
46
|
-
def x
|
|
47
|
-
end
|
|
48
|
-
"""
|
|
49
|
-
When I run reek bad_comment.rb
|
|
50
|
-
Then it reports the error "Error: You are trying to configure the smell detector 'UncommunicativeMethodName'"
|
|
51
|
-
And it reports the error "Unfortunately we cannot parse the configuration you have given."
|
|
52
|
-
And it reports the error "The source is 'bad_comment.rb'"
|
|
53
|
-
And it reports the error "the comment belongs to the expression starting in line 3"
|
|
54
|
-
|
|
55
|
-
Scenario: Bad configuration key
|
|
56
|
-
Given a file named "bad_comment.rb" with:
|
|
57
|
-
"""
|
|
58
|
-
# Test class
|
|
59
|
-
# exclude -> elude and accept -> accipt are bad keys
|
|
60
|
-
# :reek:UncommunicativeMethodName { elude: 'foo', accipt: 'bar' }
|
|
61
|
-
def x
|
|
62
|
-
end
|
|
63
|
-
"""
|
|
64
|
-
When I run reek bad_comment.rb
|
|
65
|
-
Then it reports the error "Error: You are trying to configure the smell detector 'UncommunicativeMethodName'"
|
|
66
|
-
And it reports the error "in one of your source code comments with the unknown option 'elude', 'accipt'"
|
|
67
|
-
And it reports the error "The source is 'bad_comment.rb'"
|
|
68
|
-
And it reports the error "the comment belongs to the expression starting in line 4"
|