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,96 +0,0 @@
|
|
1
|
-
# Uncommunicative Variable Name
|
2
|
-
|
3
|
-
## Introduction
|
4
|
-
|
5
|
-
An _Uncommunicative Variable Name_ is a variable name that doesn't communicate
|
6
|
-
its intent well enough. This code smell is a case of
|
7
|
-
[Uncommunicative Name](Uncommunicative-Name.md).
|
8
|
-
|
9
|
-
## Current Support in Reek
|
10
|
-
|
11
|
-
_Uncommunicative Variable Name_ checks for:
|
12
|
-
|
13
|
-
* single-character names
|
14
|
-
* any name ending with a number
|
15
|
-
* camelCaseVariableNames
|
16
|
-
|
17
|
-
## Configuration
|
18
|
-
|
19
|
-
Reek's _Uncommunicative Variable Name_ detector supports the
|
20
|
-
[Basic Smell Options](Basic-Smell-Options.md), plus:
|
21
|
-
|
22
|
-
| Option | Value | Effect |
|
23
|
-
| ---------------|-------------|---------|
|
24
|
-
| `reject` | array of strings | The set of names that Reek uses to check for bad names. Defaults to single-letter names, names ending with a number or names containing upper case letters. |
|
25
|
-
| `accept` | array of strings | Names that will be accepted (not reported) even if they match one of the `reject` expressions. Defaults to `_`.|
|
26
|
-
|
27
|
-
An example configuration could look like this:
|
28
|
-
|
29
|
-
```Yaml
|
30
|
-
---
|
31
|
-
UncommunicativeVariableName:
|
32
|
-
accept:
|
33
|
-
- x
|
34
|
-
- var1
|
35
|
-
reject:
|
36
|
-
- helper
|
37
|
-
- foobar
|
38
|
-
```
|
39
|
-
|
40
|
-
Reek will convert whatever you give it as a string to the corresponding regex, so "foobar" from above will be converted to /foobar/ internally.
|
41
|
-
|
42
|
-
Applying a configuration to a source file like this:
|
43
|
-
|
44
|
-
```Ruby
|
45
|
-
def omg
|
46
|
-
x = 5 # Should not be reported
|
47
|
-
var1 = true # Should not be reported
|
48
|
-
helper = 42 # Should be reported
|
49
|
-
foobar = false # Should be reported
|
50
|
-
end
|
51
|
-
```
|
52
|
-
|
53
|
-
Reek would report:
|
54
|
-
|
55
|
-
```
|
56
|
-
smelly.rb -- 2 warnings:
|
57
|
-
[5]:UncommunicativeVariableName: omg has the variable name 'foobar' [https://github.com/troessner/reek/blob/master/docs/Uncommunicative-Variable-Name.md]
|
58
|
-
[4]:UncommunicativeVariableName: omg has the variable name 'helper' [https://github.com/troessner/reek/blob/master/docs/Uncommunicative-Variable-Name.md]
|
59
|
-
```
|
60
|
-
|
61
|
-
## Advanced configuration
|
62
|
-
|
63
|
-
Sometimes just strings are not enough for configuration. E.g. consider this code sample:
|
64
|
-
|
65
|
-
```Ruby
|
66
|
-
def omg
|
67
|
-
foo = 42
|
68
|
-
foobar = 4242
|
69
|
-
end
|
70
|
-
```
|
71
|
-
|
72
|
-
and now imagine that you want to reject the name "foo" but not "foobar". This wouldn't be possible with just using strings.
|
73
|
-
For this reason Reek has a special syntax that allows you to use regexes by using a forward slash at the beginning and the end of the string.
|
74
|
-
Everything within the forward slashes will be loaded as a regex.
|
75
|
-
|
76
|
-
A possible configuration that allows "foobar" but rejects "foo" could look like this:
|
77
|
-
|
78
|
-
```Yaml
|
79
|
-
---
|
80
|
-
UncommunicativeVariableName:
|
81
|
-
reject:
|
82
|
-
- "/^foo$/"
|
83
|
-
```
|
84
|
-
|
85
|
-
## Reek 4
|
86
|
-
|
87
|
-
In Reek 4 you could also pass regexes to `accept` or `reject`, meaning this was perfectly valid as well:
|
88
|
-
|
89
|
-
```yaml
|
90
|
-
UncommunicativeVariableName:
|
91
|
-
accept:
|
92
|
-
- !ruby/regexp /write/
|
93
|
-
```
|
94
|
-
|
95
|
-
Support for this has been scrapped with Reek 5 to make the Reek configuration more yaml standard compliant.
|
96
|
-
You can still pass in regexes, you just have to wrap them into a string. Please see "Advanced configuration" above.
|
data/docs/Unused-Parameters.md
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
## Introduction
|
2
|
-
|
3
|
-
_Unused Parameter_ refers to methods with parameters that are unused in scope of the method.
|
4
|
-
|
5
|
-
Having unused parameters in a method is code smell because leaving dead code in
|
6
|
-
a method can never improve the method and it makes the code confusing to read.
|
7
|
-
|
8
|
-
## Example
|
9
|
-
|
10
|
-
Given:
|
11
|
-
|
12
|
-
```Ruby
|
13
|
-
class Klass
|
14
|
-
def unused_parameters(x,y,z)
|
15
|
-
puts x,y # but not z
|
16
|
-
end
|
17
|
-
end
|
18
|
-
```
|
19
|
-
|
20
|
-
Reek would emit the following warning:
|
21
|
-
|
22
|
-
```
|
23
|
-
[2]:UnusedParameters: Klass#unused_parameters has unused parameter 'z'
|
24
|
-
```
|
25
|
-
|
26
|
-
## Configuration
|
27
|
-
|
28
|
-
_Unused Parameter_ offers the [Basic Smell Options](Basic-Smell-Options.md).
|
@@ -1,101 +0,0 @@
|
|
1
|
-
## Introduction
|
2
|
-
|
3
|
-
Classes should use their private methods. Otherwise this is dead
|
4
|
-
code which is confusing and bad for maintenance.
|
5
|
-
|
6
|
-
The _Unused Private Method_ detector reports unused private instance
|
7
|
-
methods and instance methods only - class methods are ignored.
|
8
|
-
|
9
|
-
## Example
|
10
|
-
|
11
|
-
Given:
|
12
|
-
|
13
|
-
```Ruby
|
14
|
-
class Car
|
15
|
-
private
|
16
|
-
def drive; end
|
17
|
-
def start; end
|
18
|
-
end
|
19
|
-
```
|
20
|
-
|
21
|
-
Reek would emit the following warning:
|
22
|
-
|
23
|
-
```
|
24
|
-
2 warnings:
|
25
|
-
[3]:Car has the unused private instance method `drive` (UnusedPrivateMethod)
|
26
|
-
[4]:Car has the unused private instance method `start` (UnusedPrivateMethod)
|
27
|
-
```
|
28
|
-
|
29
|
-
## Configuration
|
30
|
-
|
31
|
-
_Unused Private Method_ offers the [Basic Smell Options](Basic-Smell-Options.md).
|
32
|
-
|
33
|
-
Private methods that are called via dynamic dispatch
|
34
|
-
will trigger a false alarm since detecting something like this is far out of
|
35
|
-
scope for Reek. In this case you can disable this detector via the `exclude`
|
36
|
-
configuration option (which is part of the [Basic Smell Options](Basic-Smell-Options.md))
|
37
|
-
for instance like this (an example from Reek's own codebase):
|
38
|
-
|
39
|
-
```Ruby
|
40
|
-
# :reek:UnusedPrivateMethod { exclude: [ process_ ] }
|
41
|
-
class ContextBuilder
|
42
|
-
def process_begin
|
43
|
-
# ....
|
44
|
-
end
|
45
|
-
end
|
46
|
-
```
|
47
|
-
|
48
|
-
Note that disabling this detector via comment works on a class scope, not
|
49
|
-
a method scope (like you can see above).
|
50
|
-
|
51
|
-
Another simple example would be:
|
52
|
-
|
53
|
-
```Ruby
|
54
|
-
class Alfa
|
55
|
-
private
|
56
|
-
def bravo
|
57
|
-
end
|
58
|
-
end
|
59
|
-
```
|
60
|
-
|
61
|
-
This would report:
|
62
|
-
|
63
|
-
>>
|
64
|
-
ruby.rb -- 1 warning:
|
65
|
-
[3]:UnusedPrivateMethod: Alfa has the unused private instance method 'bravo'
|
66
|
-
|
67
|
-
If you want to suppress this warning you can do this via source comment like this:
|
68
|
-
|
69
|
-
```Ruby
|
70
|
-
# :reek:UnusedPrivateMethod: { exclude: bravo }
|
71
|
-
class Alfa
|
72
|
-
private
|
73
|
-
def bravo
|
74
|
-
end
|
75
|
-
end
|
76
|
-
```
|
77
|
-
|
78
|
-
## Known limitations
|
79
|
-
|
80
|
-
* Method calls via dynamic dispatch (e.g. via `send`) is something Reek (or any other
|
81
|
-
static tool for that matter) cannot detect.
|
82
|
-
* Method calls via callback like [Rails filters](http://guides.rubyonrails.org/action_controller_overview.html#filters)
|
83
|
-
will trigger this as well, e.g.:
|
84
|
-
|
85
|
-
```Ruby
|
86
|
-
class BankController < ActionController::Base
|
87
|
-
before_action :audit
|
88
|
-
|
89
|
-
private
|
90
|
-
def audit
|
91
|
-
# ....
|
92
|
-
end
|
93
|
-
end
|
94
|
-
```
|
95
|
-
* Reek works on a per-file base. This means that using something like the [template pattern](https://en.wikipedia.org/wiki/Template_method_pattern)
|
96
|
-
with private methods will trigger this detector.
|
97
|
-
We do believe though that using private methods to fill out a template in a
|
98
|
-
superclass is not a good idea in general so this probably isn't really a problem
|
99
|
-
but still worth mentioning it.
|
100
|
-
|
101
|
-
|
data/docs/Utility-Function.md
DELETED
@@ -1,56 +0,0 @@
|
|
1
|
-
# Utility Function
|
2
|
-
|
3
|
-
## Introduction
|
4
|
-
|
5
|
-
A _Utility Function_ is any instance method that has no dependency on the state of the instance.
|
6
|
-
|
7
|
-
_Utility Function_ is heavily related to _[Feature Envy](Feature-Envy.md)_, please check out the explanation there why _Utility Function_ is something you should care about.
|
8
|
-
|
9
|
-
## Example
|
10
|
-
|
11
|
-
Given
|
12
|
-
|
13
|
-
```Ruby
|
14
|
-
class UtilityFunction
|
15
|
-
def showcase(argument)
|
16
|
-
argument.to_s + argument.to_i
|
17
|
-
end
|
18
|
-
end
|
19
|
-
```
|
20
|
-
|
21
|
-
Reek would report:
|
22
|
-
|
23
|
-
```
|
24
|
-
test.rb -- 2 warnings:
|
25
|
-
[2]:UtilityFunction#showcase doesn't depend on instance state (UtilityFunction)
|
26
|
-
```
|
27
|
-
|
28
|
-
## Current Support in Reek
|
29
|
-
|
30
|
-
_Utility Function_ will warn about any method that:
|
31
|
-
|
32
|
-
* is non-empty
|
33
|
-
* does not override an inherited method
|
34
|
-
* calls at least one method on another object
|
35
|
-
* doesn't use any of self's instance variables
|
36
|
-
* doesn't use any of self's methods
|
37
|
-
|
38
|
-
## Differences to _Feature Envy_
|
39
|
-
|
40
|
-
_[Feature Envy](Feature-Envy.md)_ is only triggered if there are some references to self and _Utility Function_ is triggered if there are no references to self.
|
41
|
-
|
42
|
-
## Configuration
|
43
|
-
|
44
|
-
Reek's _Utility Function_ detector supports the [Basic Smell Options](Basic-Smell-Options.md), plus:
|
45
|
-
|
46
|
-
| Option | Value | Effect |
|
47
|
-
| ----------------------|-------------|---------|
|
48
|
-
| `public_methods_only` | Boolean | Disable this smell detector for non-public methods (which means "private" and "protected") |
|
49
|
-
|
50
|
-
A sample configuration file would look like this:
|
51
|
-
|
52
|
-
```Yaml
|
53
|
-
---
|
54
|
-
UtilityFunction:
|
55
|
-
public_methods_only: true
|
56
|
-
```
|
data/docs/Versioning-Policy.md
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
# Versioning Policy
|
2
|
-
|
3
|
-
* CLI interface: Adding options is a non-breaking change, and would warrant an update of the minor version. Removing options is a breaking change and requires a major version update (we did this going to Reek 2). Adding a report format probably also warrents a minor version upgrade.
|
4
|
-
* API: We haven't really defined a 'public' API for using Reek programmatically, and we've only just started testing it. So, this is basically a blank slate at the moment. We will work on this as a part of the Reek 3 release.
|
5
|
-
* List of detected smells: Adding a smell warrants a minor release, removing a smell is a breaking change. This makes sense if you consider that the CLI allows running a single smell detector.
|
6
|
-
* Consistency of detected smells: This is very hard to guarantee. If we fix a bug in one of the detectors, some fragrant code may become smelly, or vice versa. Right now we don't bother with this.
|
7
|
-
* Smell configuration: The detectors are quite tolerant regarding configuration options that they don't recognize, so we regard any change here as only requiring a minor release.
|
data/docs/YAML-Reports.md
DELETED
@@ -1,93 +0,0 @@
|
|
1
|
-
# YAML Reports
|
2
|
-
|
3
|
-
## Introduction
|
4
|
-
|
5
|
-
Reek's `--yaml` option writes on $stdout a YAML dump of the smells found. Each reported smell has a number of standard fields and a number of fields that are specific to the smell's type. The common fields are as follows:
|
6
|
-
|
7
|
-
| Field | Type | Value |
|
8
|
-
| ---------------|-------------|---------|
|
9
|
-
| source | string | The name of the source file containing the smell, or `$stdin` |
|
10
|
-
| lines | array | The source file line number(s) that contribute to this smell |
|
11
|
-
| context | string | The name of the class, module or method containing the smell |
|
12
|
-
| class | string | The class to which this smell belongs |
|
13
|
-
| subclass | string | This smell's subclass within the above class |
|
14
|
-
| message | string | The message that would have been printed in a standard Reek report |
|
15
|
-
| is_active | boolean | `false` if the smell is masked by a config file; `true` otherwise |
|
16
|
-
|
17
|
-
All of these fields are grouped into hashes `location`, `smell` and `status` (see the examples below).
|
18
|
-
|
19
|
-
## Examples
|
20
|
-
|
21
|
-
Duplication:
|
22
|
-
|
23
|
-
<pre>
|
24
|
-
- !ruby/object:Reek::SmellWarning
|
25
|
-
location:
|
26
|
-
source: spec/samples/masked/dirty.rb
|
27
|
-
lines:
|
28
|
-
- 5
|
29
|
-
- 7
|
30
|
-
context: Dirty#a
|
31
|
-
smell:
|
32
|
-
class: Duplication
|
33
|
-
subclass: DuplicateMethodCall
|
34
|
-
occurrences: 2
|
35
|
-
call: puts(@s.title)
|
36
|
-
message: calls puts(@s.title) twice
|
37
|
-
status:
|
38
|
-
is_active: true
|
39
|
-
</pre>
|
40
|
-
|
41
|
-
[Nested Iterators](Nested-Iterators.md):
|
42
|
-
|
43
|
-
<pre>
|
44
|
-
- !ruby/object:Reek::SmellWarning
|
45
|
-
location:
|
46
|
-
source: spec/samples/masked/dirty.rb
|
47
|
-
lines:
|
48
|
-
- 5
|
49
|
-
context: Dirty#a
|
50
|
-
smell:
|
51
|
-
class: NestedIterators
|
52
|
-
subclass: ""
|
53
|
-
depth: 2
|
54
|
-
message: contains iterators nested 2 deep
|
55
|
-
status:
|
56
|
-
is_active: true
|
57
|
-
</pre>
|
58
|
-
|
59
|
-
[Uncommunicative Method Name](Uncommunicative-Method-Name.md):
|
60
|
-
|
61
|
-
<pre>
|
62
|
-
- !ruby/object:Reek::SmellWarning
|
63
|
-
location:
|
64
|
-
source: spec/samples/masked/dirty.rb
|
65
|
-
lines:
|
66
|
-
- 3
|
67
|
-
context: Dirty#a
|
68
|
-
smell:
|
69
|
-
class: UncommunicativeName
|
70
|
-
subclass: UncommunicativeMethodName
|
71
|
-
method_name: a
|
72
|
-
message: has the name 'a'
|
73
|
-
status:
|
74
|
-
is_active: false
|
75
|
-
</pre>
|
76
|
-
|
77
|
-
[Uncommunicative Variable Name](Uncommunicative-Variable-Name.md):
|
78
|
-
|
79
|
-
<pre>
|
80
|
-
- !ruby/object:Reek::SmellWarning
|
81
|
-
location:
|
82
|
-
source: spec/samples/masked/dirty.rb
|
83
|
-
lines:
|
84
|
-
- 5
|
85
|
-
context: Dirty#a
|
86
|
-
smell:
|
87
|
-
class: UncommunicativeName
|
88
|
-
subclass: UncommunicativeVariableName
|
89
|
-
variable_name: x
|
90
|
-
message: has the variable name 'x'
|
91
|
-
status:
|
92
|
-
is_active: true
|
93
|
-
</pre>
|
data/docs/defaults.reek.yml
DELETED
@@ -1,129 +0,0 @@
|
|
1
|
-
---
|
2
|
-
detectors:
|
3
|
-
Attribute:
|
4
|
-
enabled: true
|
5
|
-
exclude: []
|
6
|
-
BooleanParameter:
|
7
|
-
enabled: true
|
8
|
-
exclude: []
|
9
|
-
ClassVariable:
|
10
|
-
enabled: true
|
11
|
-
exclude: []
|
12
|
-
ControlParameter:
|
13
|
-
enabled: true
|
14
|
-
exclude: []
|
15
|
-
DataClump:
|
16
|
-
enabled: true
|
17
|
-
exclude: []
|
18
|
-
max_copies: 2
|
19
|
-
min_clump_size: 2
|
20
|
-
DuplicateMethodCall:
|
21
|
-
enabled: true
|
22
|
-
exclude: []
|
23
|
-
max_calls: 1
|
24
|
-
allow_calls: []
|
25
|
-
FeatureEnvy:
|
26
|
-
enabled: true
|
27
|
-
exclude: []
|
28
|
-
InstanceVariableAssumption:
|
29
|
-
enabled: true
|
30
|
-
exclude: []
|
31
|
-
IrresponsibleModule:
|
32
|
-
enabled: true
|
33
|
-
exclude: []
|
34
|
-
LongParameterList:
|
35
|
-
enabled: true
|
36
|
-
exclude: []
|
37
|
-
max_params: 3
|
38
|
-
overrides:
|
39
|
-
initialize:
|
40
|
-
max_params: 5
|
41
|
-
LongYieldList:
|
42
|
-
enabled: true
|
43
|
-
exclude: []
|
44
|
-
max_params: 3
|
45
|
-
ManualDispatch:
|
46
|
-
enabled: true
|
47
|
-
exclude: []
|
48
|
-
MissingSafeMethod:
|
49
|
-
enabled: true
|
50
|
-
exclude: []
|
51
|
-
ModuleInitialize:
|
52
|
-
enabled: true
|
53
|
-
exclude: []
|
54
|
-
NestedIterators:
|
55
|
-
enabled: true
|
56
|
-
exclude: []
|
57
|
-
max_allowed_nesting: 1
|
58
|
-
ignore_iterators:
|
59
|
-
- tap
|
60
|
-
NilCheck:
|
61
|
-
enabled: true
|
62
|
-
exclude: []
|
63
|
-
RepeatedConditional:
|
64
|
-
enabled: true
|
65
|
-
exclude: []
|
66
|
-
max_ifs: 2
|
67
|
-
SubclassedFromCoreClass:
|
68
|
-
enabled: true
|
69
|
-
exclude: []
|
70
|
-
TooManyConstants:
|
71
|
-
enabled: true
|
72
|
-
exclude: []
|
73
|
-
max_constants: 5
|
74
|
-
TooManyInstanceVariables:
|
75
|
-
enabled: true
|
76
|
-
exclude: []
|
77
|
-
max_instance_variables: 4
|
78
|
-
TooManyMethods:
|
79
|
-
enabled: true
|
80
|
-
exclude: []
|
81
|
-
max_methods: 15
|
82
|
-
TooManyStatements:
|
83
|
-
enabled: true
|
84
|
-
exclude:
|
85
|
-
- initialize
|
86
|
-
max_statements: 5
|
87
|
-
UncommunicativeMethodName:
|
88
|
-
enabled: true
|
89
|
-
exclude: []
|
90
|
-
reject:
|
91
|
-
- "/^[a-z]$/"
|
92
|
-
- "/[0-9]$/"
|
93
|
-
- "/[A-Z]/"
|
94
|
-
accept: []
|
95
|
-
UncommunicativeModuleName:
|
96
|
-
enabled: true
|
97
|
-
exclude: []
|
98
|
-
reject:
|
99
|
-
- "/^.$/"
|
100
|
-
- "/[0-9]$/"
|
101
|
-
accept: []
|
102
|
-
UncommunicativeParameterName:
|
103
|
-
enabled: true
|
104
|
-
exclude: []
|
105
|
-
reject:
|
106
|
-
- "/^.$/"
|
107
|
-
- "/[0-9]$/"
|
108
|
-
- "/[A-Z]/"
|
109
|
-
- "/^_/"
|
110
|
-
accept: []
|
111
|
-
UncommunicativeVariableName:
|
112
|
-
enabled: true
|
113
|
-
exclude: []
|
114
|
-
reject:
|
115
|
-
- "/^.$/"
|
116
|
-
- "/[0-9]$/"
|
117
|
-
- "/[A-Z]/"
|
118
|
-
accept:
|
119
|
-
- "/^_$/"
|
120
|
-
UnusedParameters:
|
121
|
-
enabled: true
|
122
|
-
exclude: []
|
123
|
-
UnusedPrivateMethod:
|
124
|
-
enabled: false
|
125
|
-
exclude: []
|
126
|
-
UtilityFunction:
|
127
|
-
enabled: true
|
128
|
-
exclude: []
|
129
|
-
public_methods_only: false
|