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,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"
|