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,123 +0,0 @@
|
|
|
1
|
-
Feature: Reek can be controlled using command-line options
|
|
2
|
-
In order to change Reek's default behaviour
|
|
3
|
-
As a developer
|
|
4
|
-
I want to supply options on the command line
|
|
5
|
-
|
|
6
|
-
Scenario: return non-zero status on bad option
|
|
7
|
-
When I run reek --no-such-option
|
|
8
|
-
Then the exit status indicates an error
|
|
9
|
-
And it reports the error "Error: invalid option: --no-such-option"
|
|
10
|
-
And there is no output on stdout
|
|
11
|
-
|
|
12
|
-
Scenario: display the current version number
|
|
13
|
-
When I run reek --version
|
|
14
|
-
Then it succeeds
|
|
15
|
-
And it reports the current version
|
|
16
|
-
|
|
17
|
-
Scenario: return given status code when using --failure-exit-code
|
|
18
|
-
Given the smelly file 'smelly.rb'
|
|
19
|
-
When I run reek smelly.rb --failure-exit-code 23
|
|
20
|
-
Then the exit status is 23
|
|
21
|
-
|
|
22
|
-
Scenario: return given status code when using --success-exit-code
|
|
23
|
-
Given the clean file "clean.rb"
|
|
24
|
-
When I run reek clean.rb --success-exit-code 42
|
|
25
|
-
Then the exit status is 42
|
|
26
|
-
|
|
27
|
-
Scenario: display the help information
|
|
28
|
-
When I run reek --help
|
|
29
|
-
Then it succeeds
|
|
30
|
-
And it reports:
|
|
31
|
-
"""
|
|
32
|
-
Usage: reek [options] [files]
|
|
33
|
-
|
|
34
|
-
Examples:
|
|
35
|
-
|
|
36
|
-
reek lib/*.rb
|
|
37
|
-
reek -s lib
|
|
38
|
-
cat my_class.rb | reek
|
|
39
|
-
|
|
40
|
-
See https://github.com/troessner/reek for detailed help.
|
|
41
|
-
|
|
42
|
-
Configuration:
|
|
43
|
-
-c, --config FILE Read configuration options from FILE
|
|
44
|
-
--smell SMELL Only look for a specific smell.
|
|
45
|
-
Call it like this: reek --smell MissingSafeMethod source.rb
|
|
46
|
-
Check out https://github.com/troessner/reek/blob/v6.0.2/docs/Code-Smells.md for a list of smells
|
|
47
|
-
--stdin-filename FILE When passing code in via pipe, assume this filename when checking file or directory rules in the config.
|
|
48
|
-
|
|
49
|
-
Generate a todo list:
|
|
50
|
-
-t, --todo Generate a todo list
|
|
51
|
-
|
|
52
|
-
Report format:
|
|
53
|
-
-f, --format FORMAT Report smells in the given format:
|
|
54
|
-
html
|
|
55
|
-
text (default)
|
|
56
|
-
yaml
|
|
57
|
-
json
|
|
58
|
-
xml
|
|
59
|
-
|
|
60
|
-
Text format options:
|
|
61
|
-
--[no-]color Use colors for the output (default: true)
|
|
62
|
-
-V, --[no-]empty-headings Show headings for smell-free source files (default: false)
|
|
63
|
-
-U, --[no-]documentation Show link to related documentation page for each smell (default: true)
|
|
64
|
-
--[no-]show-configuration-path
|
|
65
|
-
Show which configuration file Reek is using (default: false)
|
|
66
|
-
-n, --[no-]line-numbers Show line numbers in the output (default: true)
|
|
67
|
-
-s, --single-line Show location in editor-compatible single-line-per-smell format
|
|
68
|
-
-P, --[no-]progress Show progress of each source as it is examined (default: true)
|
|
69
|
-
--sort-by SORTING Sort reported files by the given criterium:
|
|
70
|
-
smelliness ("smelliest" files first)
|
|
71
|
-
none (default - output in processing order)
|
|
72
|
-
--force-exclusion Force excluding files specified in the configuration `exclude_paths`
|
|
73
|
-
even if they are explicitly passed as arguments
|
|
74
|
-
|
|
75
|
-
Exit codes:
|
|
76
|
-
--success-exit-code CODE The exit code when no smells are found (default: 0)
|
|
77
|
-
--failure-exit-code CODE The exit code when smells are found (default: 2)
|
|
78
|
-
|
|
79
|
-
Utility options:
|
|
80
|
-
-h, --help Show this message
|
|
81
|
-
-l, --list List all available smell detectors
|
|
82
|
-
-v, --version Show version
|
|
83
|
-
"""
|
|
84
|
-
|
|
85
|
-
Scenario: List all available smell detectors
|
|
86
|
-
When I run reek --list
|
|
87
|
-
Then it succeeds
|
|
88
|
-
And it reports:
|
|
89
|
-
"""
|
|
90
|
-
All available smell detectors:
|
|
91
|
-
|
|
92
|
-
Attribute
|
|
93
|
-
BooleanParameter
|
|
94
|
-
ClassVariable
|
|
95
|
-
ControlParameter
|
|
96
|
-
DataClump
|
|
97
|
-
DuplicateMethodCall
|
|
98
|
-
FeatureEnvy
|
|
99
|
-
InstanceVariableAssumption
|
|
100
|
-
IrresponsibleModule
|
|
101
|
-
LongParameterList
|
|
102
|
-
LongYieldList
|
|
103
|
-
ManualDispatch
|
|
104
|
-
MissingSafeMethod
|
|
105
|
-
ModuleInitialize
|
|
106
|
-
NestedIterators
|
|
107
|
-
NilCheck
|
|
108
|
-
RepeatedConditional
|
|
109
|
-
SubclassedFromCoreClass
|
|
110
|
-
TooManyConstants
|
|
111
|
-
TooManyInstanceVariables
|
|
112
|
-
TooManyMethods
|
|
113
|
-
TooManyStatements
|
|
114
|
-
UncommunicativeMethodName
|
|
115
|
-
UncommunicativeModuleName
|
|
116
|
-
UncommunicativeParameterName
|
|
117
|
-
UncommunicativeVariableName
|
|
118
|
-
UnusedParameters
|
|
119
|
-
UnusedPrivateMethod
|
|
120
|
-
UtilityFunction
|
|
121
|
-
|
|
122
|
-
Check out https://github.com/troessner/reek/blob/v6.0.2/docs/Code-Smells.md for a details on each detector
|
|
123
|
-
"""
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
Feature: Show progress
|
|
2
|
-
In order to see the progress of the examiners
|
|
3
|
-
As a developer
|
|
4
|
-
I want to be able to selectively activate progress reporting
|
|
5
|
-
|
|
6
|
-
# Note that --progress is the default on TTYs, but needs to be explicitely
|
|
7
|
-
# enabled here because output in the cucumber scenarios does not go to a TTY.
|
|
8
|
-
Scenario: shows progress output on mixed files by default
|
|
9
|
-
Given a directory called 'mixed_files' containing some clean and smelly files
|
|
10
|
-
When I run reek --progress mixed_files
|
|
11
|
-
Then the exit status indicates smells
|
|
12
|
-
And it reports:
|
|
13
|
-
"""
|
|
14
|
-
Inspecting 2 file(s):
|
|
15
|
-
.S
|
|
16
|
-
|
|
17
|
-
mixed_files/dirty.rb -- 2 warnings:
|
|
18
|
-
[4]:UncommunicativeMethodName: Smelly#x has the name 'x'
|
|
19
|
-
[5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
|
|
20
|
-
2 total warnings
|
|
21
|
-
"""
|
|
22
|
-
|
|
23
|
-
Scenario: --no-progress disables progress output
|
|
24
|
-
Given a directory called 'mixed_files' containing some clean and smelly files
|
|
25
|
-
When I run reek --no-progress mixed_files
|
|
26
|
-
Then the exit status indicates smells
|
|
27
|
-
And it reports:
|
|
28
|
-
"""
|
|
29
|
-
mixed_files/dirty.rb -- 2 warnings:
|
|
30
|
-
[4]:UncommunicativeMethodName: Smelly#x has the name 'x'
|
|
31
|
-
[5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
|
|
32
|
-
2 total warnings
|
|
33
|
-
"""
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
Feature: Smell selection
|
|
2
|
-
In order to focus on particular code smells
|
|
3
|
-
As a developer
|
|
4
|
-
I want to be able to selectively activate smell detectors
|
|
5
|
-
|
|
6
|
-
Scenario: --smell selects a smell to detect
|
|
7
|
-
Given the smelly file 'smelly.rb'
|
|
8
|
-
And a configuration file 'partial_mask.reek'
|
|
9
|
-
When I run reek --no-line-numbers --smell UncommunicativeVariableName smelly.rb
|
|
10
|
-
Then the exit status indicates smells
|
|
11
|
-
And it reports:
|
|
12
|
-
"""
|
|
13
|
-
smelly.rb -- 1 warning:
|
|
14
|
-
UncommunicativeVariableName: Smelly#x has the variable name 'y'
|
|
15
|
-
"""
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
Feature: Reports total number of code smells
|
|
2
|
-
In order to monitor the total number of smells
|
|
3
|
-
Reek outputs the total number of smells among all files inspected.
|
|
4
|
-
|
|
5
|
-
Scenario: Does not output total number of smells when inspecting single file
|
|
6
|
-
Given the smelly file 'smelly.rb'
|
|
7
|
-
When I run reek smelly.rb
|
|
8
|
-
Then the exit status indicates smells
|
|
9
|
-
And it reports:
|
|
10
|
-
"""
|
|
11
|
-
smelly.rb -- 2 warnings:
|
|
12
|
-
[4]:UncommunicativeMethodName: Smelly#x has the name 'x'
|
|
13
|
-
[5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
|
|
14
|
-
"""
|
|
15
|
-
|
|
16
|
-
Scenario: Output total number of smells when inspecting multiple files
|
|
17
|
-
Given a directory called 'smelly' containing two smelly files
|
|
18
|
-
When I run reek smelly
|
|
19
|
-
Then the exit status indicates smells
|
|
20
|
-
And it reports:
|
|
21
|
-
"""
|
|
22
|
-
smelly/dirty_one.rb -- 2 warnings:
|
|
23
|
-
[4]:UncommunicativeMethodName: Smelly#x has the name 'x'
|
|
24
|
-
[5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
|
|
25
|
-
smelly/dirty_two.rb -- 2 warnings:
|
|
26
|
-
[4]:UncommunicativeMethodName: Smelly#x has the name 'x'
|
|
27
|
-
[5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
|
|
28
|
-
4 total warnings
|
|
29
|
-
"""
|
|
30
|
-
|
|
31
|
-
Scenario: Output total number of smells even if total equals 0
|
|
32
|
-
Given a directory called 'clean' containing two clean files
|
|
33
|
-
When I run reek clean
|
|
34
|
-
Then it succeeds
|
|
35
|
-
And it reports:
|
|
36
|
-
"""
|
|
37
|
-
0 total warnings
|
|
38
|
-
"""
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
Feature: Reek reads from $stdin when no files are given
|
|
2
|
-
In order to use reek with pipelines
|
|
3
|
-
As a developer
|
|
4
|
-
I want to pipe source code on stdin
|
|
5
|
-
|
|
6
|
-
Scenario: return zero status with no smells
|
|
7
|
-
When I pass "def simple() @fred = 3 end" to reek
|
|
8
|
-
Then it succeeds
|
|
9
|
-
And it reports nothing
|
|
10
|
-
|
|
11
|
-
Scenario: outputs nothing on empty stdin
|
|
12
|
-
When I pass "" to reek
|
|
13
|
-
Then it succeeds
|
|
14
|
-
And it reports nothing
|
|
15
|
-
|
|
16
|
-
Scenario: outputs header only on empty stdin in verbose mode
|
|
17
|
-
When I pass "" to reek -V
|
|
18
|
-
Then it succeeds
|
|
19
|
-
And it reports:
|
|
20
|
-
"""
|
|
21
|
-
STDIN -- 0 warnings
|
|
22
|
-
"""
|
|
23
|
-
|
|
24
|
-
Scenario: return non-zero status when there are smells
|
|
25
|
-
When I pass "class Turn; def y() @x = 3; end end" to reek
|
|
26
|
-
Then the exit status indicates smells
|
|
27
|
-
And it reports:
|
|
28
|
-
"""
|
|
29
|
-
STDIN -- 3 warnings:
|
|
30
|
-
[1]:IrresponsibleModule: Turn has no descriptive comment
|
|
31
|
-
[1]:UncommunicativeMethodName: Turn#y has the name 'y'
|
|
32
|
-
[1]:UncommunicativeVariableName: Turn has the variable name '@x'
|
|
33
|
-
"""
|
|
34
|
-
|
|
35
|
-
Scenario: syntax error causes the source to be ignored
|
|
36
|
-
When I pass "= invalid syntax =" to reek
|
|
37
|
-
Then it succeeds
|
|
38
|
-
And it reports the error "Parser::SyntaxError: unexpected token tEQL"
|
|
39
|
-
|
|
40
|
-
Scenario: providing a filename to use for the config to match against
|
|
41
|
-
Given a file named "web_app/config.reek" with:
|
|
42
|
-
"""
|
|
43
|
-
---
|
|
44
|
-
directories:
|
|
45
|
-
"web_app/app/controllers":
|
|
46
|
-
IrresponsibleModule:
|
|
47
|
-
enabled: false
|
|
48
|
-
NestedIterators:
|
|
49
|
-
enabled: false
|
|
50
|
-
InstanceVariableAssumption:
|
|
51
|
-
enabled: false
|
|
52
|
-
"""
|
|
53
|
-
When I pass a stdin to reek --config web_app/config.reek --stdin-filename web_app/app/controllers/users_controller with:
|
|
54
|
-
"""
|
|
55
|
-
class UsersController < ApplicationController
|
|
56
|
-
def show
|
|
57
|
-
respond_with do |format|
|
|
58
|
-
format.json { |json| @user.to_custom_json }
|
|
59
|
-
format.xml { |xml| @user.to_fancy_xml }
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
"""
|
|
64
|
-
Then it succeeds
|
|
65
|
-
And it reports nothing
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
Feature: `accept` 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 accept specific patterns and names to exclude them from reporting
|
|
5
|
-
|
|
6
|
-
Scenario: Accept names
|
|
7
|
-
Given a file named "config.reek" with:
|
|
8
|
-
"""
|
|
9
|
-
---
|
|
10
|
-
detectors:
|
|
11
|
-
UncommunicativeMethodName:
|
|
12
|
-
accept:
|
|
13
|
-
- m1
|
|
14
|
-
- m2
|
|
15
|
-
UncommunicativeParameterName:
|
|
16
|
-
accept:
|
|
17
|
-
- a1
|
|
18
|
-
- a2
|
|
19
|
-
UncommunicativeModuleName:
|
|
20
|
-
accept:
|
|
21
|
-
- C1
|
|
22
|
-
UncommunicativeVariableName:
|
|
23
|
-
accept:
|
|
24
|
-
- var1
|
|
25
|
-
"""
|
|
26
|
-
And a file named "smelly.rb" with:
|
|
27
|
-
"""
|
|
28
|
-
# Should not report UncommunicativeModuleName
|
|
29
|
-
class C1
|
|
30
|
-
# Should not report UncommunicativeMethodName and UncommunicativeParameterName
|
|
31
|
-
def m1(a1); a1; end
|
|
32
|
-
# Should not report UncommunicativeMethodName and UncommunicativeParameterName
|
|
33
|
-
def m2(a2); a2; end
|
|
34
|
-
# Should report UncommunicativeMethodName and UncommunicativeParameterName
|
|
35
|
-
def m3(a3); a3; end
|
|
36
|
-
var1 = 2 # Should not report UncommunicativeVariableName
|
|
37
|
-
myvar1 = 2 # Should not report UncommunicativeVariableName
|
|
38
|
-
var2 = 2 # Should report UncommunicativeVariableName
|
|
39
|
-
end
|
|
40
|
-
"""
|
|
41
|
-
When I run reek -c config.reek smelly.rb
|
|
42
|
-
Then it reports:
|
|
43
|
-
"""
|
|
44
|
-
smelly.rb -- 3 warnings:
|
|
45
|
-
[8]:UncommunicativeMethodName: C1#m3 has the name 'm3'
|
|
46
|
-
[8]:UncommunicativeParameterName: C1#m3 has the parameter name 'a3'
|
|
47
|
-
[11]:UncommunicativeVariableName: C1 has the variable name 'var2'
|
|
48
|
-
"""
|
|
49
|
-
|
|
50
|
-
Scenario: Accept regexes
|
|
51
|
-
Given a file named "config.reek" with:
|
|
52
|
-
"""
|
|
53
|
-
---
|
|
54
|
-
detectors:
|
|
55
|
-
UncommunicativeMethodName:
|
|
56
|
-
accept:
|
|
57
|
-
- /oobar/
|
|
58
|
-
UncommunicativeParameterName:
|
|
59
|
-
accept:
|
|
60
|
-
- /ola/
|
|
61
|
-
UncommunicativeModuleName:
|
|
62
|
-
accept:
|
|
63
|
-
- /lassy/
|
|
64
|
-
UncommunicativeVariableName:
|
|
65
|
-
accept:
|
|
66
|
-
- /^var1/
|
|
67
|
-
"""
|
|
68
|
-
And a file named "smelly.rb" with:
|
|
69
|
-
"""
|
|
70
|
-
# Should not report UncommunicativeModuleName
|
|
71
|
-
class Classy1
|
|
72
|
-
# Should not report UncommunicativeMethodName and UncommunicativeParameterName
|
|
73
|
-
def foobar1(hola1); hola1; end
|
|
74
|
-
# Should report UncommunicativeMethodName and UncommunicativeParameterName
|
|
75
|
-
def m2(a2); a2; end
|
|
76
|
-
var1 = 2 # Should not report UncommunicativeVariableName
|
|
77
|
-
myvar1 = 2 # Should report UncommunicativeVariableName
|
|
78
|
-
end
|
|
79
|
-
"""
|
|
80
|
-
When I run reek -c config.reek smelly.rb
|
|
81
|
-
Then it reports:
|
|
82
|
-
"""
|
|
83
|
-
smelly.rb -- 3 warnings:
|
|
84
|
-
[6]:UncommunicativeMethodName: Classy1#m2 has the name 'm2'
|
|
85
|
-
[6]:UncommunicativeParameterName: Classy1#m2 has the parameter name 'a2'
|
|
86
|
-
[8]:UncommunicativeVariableName: Classy1 has the variable name 'myvar1'
|
|
87
|
-
"""
|
|
@@ -1,274 +0,0 @@
|
|
|
1
|
-
Feature: Directory directives
|
|
2
|
-
In order to have a more fine-grained control over what Reek reports
|
|
3
|
-
And to enable domain specific modes (like a Ruby on Rails mode)
|
|
4
|
-
As a user
|
|
5
|
-
I want to be able to configure Reek using directory directives
|
|
6
|
-
|
|
7
|
-
Scenario: Configure multiple directories
|
|
8
|
-
Given a file named "web_app/config.reek" with:
|
|
9
|
-
"""
|
|
10
|
-
---
|
|
11
|
-
directories:
|
|
12
|
-
"web_app/app/controllers":
|
|
13
|
-
IrresponsibleModule:
|
|
14
|
-
enabled: false
|
|
15
|
-
NestedIterators:
|
|
16
|
-
enabled: false
|
|
17
|
-
"web_app/app/helpers":
|
|
18
|
-
IrresponsibleModule:
|
|
19
|
-
enabled: false
|
|
20
|
-
UtilityFunction:
|
|
21
|
-
enabled: false
|
|
22
|
-
"""
|
|
23
|
-
And a file named "web_app/app/controllers/users_controller.rb" with:
|
|
24
|
-
"""
|
|
25
|
-
class UsersController < ApplicationController
|
|
26
|
-
def show
|
|
27
|
-
respond_with do |format|
|
|
28
|
-
format.json { |json| @user.to_custom_json }
|
|
29
|
-
format.xml { |xml| @user.to_fancy_xml }
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
"""
|
|
34
|
-
And a file named "web_app/app/helpers/application_helper.rb" with:
|
|
35
|
-
"""
|
|
36
|
-
module ApplicationHelper
|
|
37
|
-
def current_year
|
|
38
|
-
Time.zone.now.year
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
"""
|
|
42
|
-
And a file named "web_app/app/models/user.rb" with:
|
|
43
|
-
"""
|
|
44
|
-
class User < ActiveRecord::Base
|
|
45
|
-
def logged_in_with_role(role)
|
|
46
|
-
true
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
"""
|
|
50
|
-
When I run reek -c web_app/config.reek web_app/
|
|
51
|
-
Then it reports:
|
|
52
|
-
"""
|
|
53
|
-
web_app/app/controllers/users_controller.rb -- 1 warning:
|
|
54
|
-
[1]:InstanceVariableAssumption: UsersController assumes too much for instance variable '@user'
|
|
55
|
-
web_app/app/models/user.rb -- 2 warnings:
|
|
56
|
-
[1]:IrresponsibleModule: User has no descriptive comment
|
|
57
|
-
[2]:UnusedParameters: User#logged_in_with_role has unused parameter 'role'
|
|
58
|
-
3 total warnings
|
|
59
|
-
"""
|
|
60
|
-
|
|
61
|
-
Scenario: Ignore trailing slashes
|
|
62
|
-
Given a file named "web_app/config.reek" with:
|
|
63
|
-
"""
|
|
64
|
-
---
|
|
65
|
-
directories:
|
|
66
|
-
"controllers/":
|
|
67
|
-
IrresponsibleModule:
|
|
68
|
-
enabled: false
|
|
69
|
-
"""
|
|
70
|
-
And a file named "controllers/users_controller.rb" with:
|
|
71
|
-
"""
|
|
72
|
-
class UsersController
|
|
73
|
-
def show
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
"""
|
|
77
|
-
When I run reek -c web_app/config.reek controllers
|
|
78
|
-
Then it reports nothing
|
|
79
|
-
|
|
80
|
-
Scenario: Partially mask smells in different directories
|
|
81
|
-
Given a file named "web_app/config.reek" with:
|
|
82
|
-
"""
|
|
83
|
-
---
|
|
84
|
-
directories:
|
|
85
|
-
"web_app/app/controllers":
|
|
86
|
-
IrresponsibleModule:
|
|
87
|
-
enabled: true
|
|
88
|
-
"web_app/app/helpers":
|
|
89
|
-
IrresponsibleModule:
|
|
90
|
-
enabled: false
|
|
91
|
-
UtilityFunction:
|
|
92
|
-
enabled: false
|
|
93
|
-
"web_app/app/models":
|
|
94
|
-
IrresponsibleModule:
|
|
95
|
-
enabled: false
|
|
96
|
-
"""
|
|
97
|
-
And a file named "web_app/app/controllers/users_controller.rb" with:
|
|
98
|
-
"""
|
|
99
|
-
class UsersController < ApplicationController
|
|
100
|
-
def show
|
|
101
|
-
respond_with do |format|
|
|
102
|
-
format.json { |json| @user.to_custom_json }
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
end
|
|
106
|
-
"""
|
|
107
|
-
And a file named "web_app/app/helpers/application_helper.rb" with:
|
|
108
|
-
"""
|
|
109
|
-
module ApplicationHelper
|
|
110
|
-
def current_year
|
|
111
|
-
Time.zone.now.year
|
|
112
|
-
end
|
|
113
|
-
end
|
|
114
|
-
"""
|
|
115
|
-
And a file named "web_app/app/models/user.rb" with:
|
|
116
|
-
"""
|
|
117
|
-
class User < ActiveRecord::Base
|
|
118
|
-
def logged_in_with_role(role)
|
|
119
|
-
true
|
|
120
|
-
end
|
|
121
|
-
end
|
|
122
|
-
"""
|
|
123
|
-
When I run reek -c web_app/config.reek web_app/
|
|
124
|
-
Then it reports:
|
|
125
|
-
"""
|
|
126
|
-
web_app/app/controllers/users_controller.rb -- 3 warnings:
|
|
127
|
-
[1]:InstanceVariableAssumption: UsersController assumes too much for instance variable '@user'
|
|
128
|
-
[1]:IrresponsibleModule: UsersController has no descriptive comment
|
|
129
|
-
[4]:NestedIterators: UsersController#show contains iterators nested 2 deep
|
|
130
|
-
web_app/app/models/user.rb -- 1 warning:
|
|
131
|
-
[2]:UnusedParameters: User#logged_in_with_role has unused parameter 'role'
|
|
132
|
-
4 total warnings
|
|
133
|
-
"""
|
|
134
|
-
|
|
135
|
-
Scenario: Use the default directive if there is no directory directive
|
|
136
|
-
Given a file named "config.reek" with:
|
|
137
|
-
"""
|
|
138
|
-
---
|
|
139
|
-
directories:
|
|
140
|
-
"web_app/app/controllers":
|
|
141
|
-
IrresponsibleModule:
|
|
142
|
-
enabled: true
|
|
143
|
-
NestedIterators:
|
|
144
|
-
enabled: false
|
|
145
|
-
detectors:
|
|
146
|
-
IrresponsibleModule:
|
|
147
|
-
enabled: false
|
|
148
|
-
NestedIterators:
|
|
149
|
-
enabled: true
|
|
150
|
-
"""
|
|
151
|
-
And a file named "web_app/app/controllers/users_controller.rb" with:
|
|
152
|
-
"""
|
|
153
|
-
class UsersController < ApplicationController
|
|
154
|
-
def show
|
|
155
|
-
respond_with do |format|
|
|
156
|
-
format.json { |json| @user.to_custom_json }
|
|
157
|
-
end
|
|
158
|
-
end
|
|
159
|
-
end
|
|
160
|
-
"""
|
|
161
|
-
And a file named "other/projects_controller.rb" with:
|
|
162
|
-
"""
|
|
163
|
-
class ProjectController < ApplicationController
|
|
164
|
-
def show
|
|
165
|
-
respond_with do |format|
|
|
166
|
-
format.json { |json| @project.to_custom_json }
|
|
167
|
-
end
|
|
168
|
-
end
|
|
169
|
-
end
|
|
170
|
-
"""
|
|
171
|
-
When I run reek -c config.reek other/ web_app/
|
|
172
|
-
Then it reports:
|
|
173
|
-
"""
|
|
174
|
-
other/projects_controller.rb -- 2 warnings:
|
|
175
|
-
[1]:InstanceVariableAssumption: ProjectController assumes too much for instance variable '@project'
|
|
176
|
-
[4]:NestedIterators: ProjectController#show contains iterators nested 2 deep
|
|
177
|
-
web_app/app/controllers/users_controller.rb -- 2 warnings:
|
|
178
|
-
[1]:InstanceVariableAssumption: UsersController assumes too much for instance variable '@user'
|
|
179
|
-
[1]:IrresponsibleModule: UsersController has no descriptive comment
|
|
180
|
-
4 total warnings
|
|
181
|
-
"""
|
|
182
|
-
|
|
183
|
-
Scenario: Abort on non-existent smell type in directory directive
|
|
184
|
-
Given a file named "config.reek" with:
|
|
185
|
-
"""
|
|
186
|
-
---
|
|
187
|
-
directories:
|
|
188
|
-
"dummy_directory":
|
|
189
|
-
# Typo: Should be NestedIterators
|
|
190
|
-
IteratorsNested:
|
|
191
|
-
enabled: false
|
|
192
|
-
"""
|
|
193
|
-
And a file named "dummy_directory/dummy.rb" with:
|
|
194
|
-
"""
|
|
195
|
-
class Dummy
|
|
196
|
-
end
|
|
197
|
-
"""
|
|
198
|
-
|
|
199
|
-
When I run reek -c config.reek dummy_directory/
|
|
200
|
-
Then the exit status indicates an error
|
|
201
|
-
And stderr reports:
|
|
202
|
-
"""
|
|
203
|
-
Error: We found some problems with your configuration file: [/directories/dummy_directory/IteratorsNested] key 'IteratorsNested:' is undefined.
|
|
204
|
-
"""
|
|
205
|
-
|
|
206
|
-
Scenario: Abort on file as directory directive
|
|
207
|
-
Given a file named "config.reek" with:
|
|
208
|
-
"""
|
|
209
|
-
---
|
|
210
|
-
directories:
|
|
211
|
-
"dummy_directory/dummy.rb":
|
|
212
|
-
NestedIterators:
|
|
213
|
-
enabled: false
|
|
214
|
-
"""
|
|
215
|
-
And a file named "dummy_directory/dummy.rb" with:
|
|
216
|
-
"""
|
|
217
|
-
class Dummy
|
|
218
|
-
end
|
|
219
|
-
"""
|
|
220
|
-
When I run reek -c config.reek dummy_directory/
|
|
221
|
-
Then the exit status indicates an error
|
|
222
|
-
And stderr reports:
|
|
223
|
-
"""
|
|
224
|
-
Error: `dummy_directory/dummy.rb` is supposed to be a directory but is a file
|
|
225
|
-
|
|
226
|
-
"""
|
|
227
|
-
|
|
228
|
-
Scenario: In case of overlapping configurations, pick the most appropriate one
|
|
229
|
-
Given a file named "config.reek" with:
|
|
230
|
-
"""
|
|
231
|
-
---
|
|
232
|
-
directories:
|
|
233
|
-
"foo/bar/baz":
|
|
234
|
-
IrresponsibleModule:
|
|
235
|
-
enabled: false
|
|
236
|
-
NestedIterators:
|
|
237
|
-
enabled: true
|
|
238
|
-
"foo/bar":
|
|
239
|
-
IrresponsibleModule:
|
|
240
|
-
enabled: true
|
|
241
|
-
NestedIterators:
|
|
242
|
-
enabled: false
|
|
243
|
-
"""
|
|
244
|
-
And a file named "foo/bar/baz/klass.rb" with:
|
|
245
|
-
"""
|
|
246
|
-
class Klass
|
|
247
|
-
def meth
|
|
248
|
-
respond_to do |arg|
|
|
249
|
-
answer_to do |arg|
|
|
250
|
-
end
|
|
251
|
-
end
|
|
252
|
-
end
|
|
253
|
-
end
|
|
254
|
-
"""
|
|
255
|
-
And a file named "foo/bar/klazz.rb" with:
|
|
256
|
-
"""
|
|
257
|
-
class Klazz
|
|
258
|
-
def meth
|
|
259
|
-
respond_to do |arg|
|
|
260
|
-
answer_to do |arg|
|
|
261
|
-
end
|
|
262
|
-
end
|
|
263
|
-
end
|
|
264
|
-
end
|
|
265
|
-
"""
|
|
266
|
-
When I run reek -c config.reek foo/
|
|
267
|
-
Then it reports:
|
|
268
|
-
"""
|
|
269
|
-
foo/bar/baz/klass.rb -- 1 warning:
|
|
270
|
-
[4]:NestedIterators: Klass#meth contains iterators nested 2 deep
|
|
271
|
-
foo/bar/klazz.rb -- 1 warning:
|
|
272
|
-
[1]:IrresponsibleModule: Klazz has no descriptive comment
|
|
273
|
-
2 total warnings
|
|
274
|
-
"""
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
Feature: Exclude directives
|
|
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 exclude specific contexts from reporting
|
|
5
|
-
|
|
6
|
-
Scenario: Exclude multiple contexts
|
|
7
|
-
Given a file named "config.reek" with:
|
|
8
|
-
"""
|
|
9
|
-
---
|
|
10
|
-
detectors:
|
|
11
|
-
UncommunicativeMethodName:
|
|
12
|
-
exclude:
|
|
13
|
-
- "Smelly#x"
|
|
14
|
-
UnusedPrivateMethod:
|
|
15
|
-
enabled: true
|
|
16
|
-
exclude:
|
|
17
|
-
- "Smelly#foobar"
|
|
18
|
-
"""
|
|
19
|
-
And a file named "smelly.rb" with:
|
|
20
|
-
"""
|
|
21
|
-
class Smelly
|
|
22
|
-
# Should report IrresponsibleModule
|
|
23
|
-
def foo(arg); end # Should report UnusedParameter
|
|
24
|
-
def x; end # Should not report UncommunicativeMethodName
|
|
25
|
-
private
|
|
26
|
-
def foobar; end # Should not report UnusedPrivateMethod
|
|
27
|
-
end
|
|
28
|
-
"""
|
|
29
|
-
When I run reek -c config.reek smelly.rb
|
|
30
|
-
Then it reports:
|
|
31
|
-
"""
|
|
32
|
-
smelly.rb -- 2 warnings:
|
|
33
|
-
[1]:IrresponsibleModule: Smelly has no descriptive comment
|
|
34
|
-
[3]:UnusedParameters: Smelly#foo has unused parameter 'arg'
|
|
35
|
-
"""
|