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.
Files changed (217) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -1
  3. data/CONTRIBUTING.md +3 -0
  4. data/Dockerfile +1 -1
  5. data/Gemfile +6 -6
  6. data/lib/reek/ast/ast_node_class_map.rb +1 -1
  7. data/lib/reek/report/code_climate/code_climate_formatter.rb +1 -3
  8. data/lib/reek/smell_detectors/base_detector.rb +1 -1
  9. data/lib/reek/smell_warning.rb +1 -1
  10. data/lib/reek/source/source_locator.rb +1 -3
  11. data/lib/reek/version.rb +1 -1
  12. data/reek.gemspec +4 -1
  13. metadata +3 -208
  14. data/docs/API.md +0 -174
  15. data/docs/Attribute.md +0 -39
  16. data/docs/Basic-Smell-Options.md +0 -85
  17. data/docs/Boolean-Parameter.md +0 -54
  18. data/docs/Class-Variable.md +0 -40
  19. data/docs/Code-Smells.md +0 -39
  20. data/docs/Command-Line-Options.md +0 -119
  21. data/docs/Control-Couple.md +0 -26
  22. data/docs/Control-Parameter.md +0 -32
  23. data/docs/Data-Clump.md +0 -46
  24. data/docs/Duplicate-Method-Call.md +0 -264
  25. data/docs/Feature-Envy.md +0 -93
  26. data/docs/How-To-Write-New-Detectors.md +0 -132
  27. data/docs/How-reek-works-internally.md +0 -114
  28. data/docs/Instance-Variable-Assumption.md +0 -163
  29. data/docs/Irresponsible-Module.md +0 -47
  30. data/docs/Large-Class.md +0 -16
  31. data/docs/Long-Parameter-List.md +0 -39
  32. data/docs/Long-Yield-List.md +0 -37
  33. data/docs/Manual-Dispatch.md +0 -30
  34. data/docs/Missing-Safe-Method.md +0 -92
  35. data/docs/Module-Initialize.md +0 -62
  36. data/docs/Nested-Iterators.md +0 -59
  37. data/docs/Nil-Check.md +0 -47
  38. data/docs/RSpec-matchers.md +0 -129
  39. data/docs/Rake-Task.md +0 -66
  40. data/docs/Reek-4-to-Reek-5-migration.md +0 -188
  41. data/docs/Reek-Driven-Development.md +0 -46
  42. data/docs/Repeated-Conditional.md +0 -47
  43. data/docs/Simulated-Polymorphism.md +0 -16
  44. data/docs/Smell-Suppression.md +0 -96
  45. data/docs/Style-Guide.md +0 -19
  46. data/docs/Subclassed-From-Core-Class.md +0 -79
  47. data/docs/Too-Many-Constants.md +0 -37
  48. data/docs/Too-Many-Instance-Variables.md +0 -43
  49. data/docs/Too-Many-Methods.md +0 -56
  50. data/docs/Too-Many-Statements.md +0 -54
  51. data/docs/Uncommunicative-Method-Name.md +0 -94
  52. data/docs/Uncommunicative-Module-Name.md +0 -92
  53. data/docs/Uncommunicative-Name.md +0 -18
  54. data/docs/Uncommunicative-Parameter-Name.md +0 -90
  55. data/docs/Uncommunicative-Variable-Name.md +0 -96
  56. data/docs/Unused-Parameters.md +0 -28
  57. data/docs/Unused-Private-Method.md +0 -101
  58. data/docs/Utility-Function.md +0 -56
  59. data/docs/Versioning-Policy.md +0 -7
  60. data/docs/YAML-Reports.md +0 -93
  61. data/docs/defaults.reek.yml +0 -129
  62. data/docs/templates/default/docstring/html/public_api_marker.erb +0 -3
  63. data/docs/templates/default/docstring/setup.rb +0 -35
  64. data/docs/templates/default/fulldoc/html/css/common.css +0 -1
  65. data/docs/yard_plugin.rb +0 -17
  66. data/features/command_line_interface/basic_usage.feature +0 -15
  67. data/features/command_line_interface/options.feature +0 -123
  68. data/features/command_line_interface/show_progress.feature +0 -33
  69. data/features/command_line_interface/smell_selection.feature +0 -15
  70. data/features/command_line_interface/smells_count.feature +0 -38
  71. data/features/command_line_interface/stdin.feature +0 -65
  72. data/features/configuration_files/accept_setting.feature +0 -87
  73. data/features/configuration_files/directory_specific_directives.feature +0 -274
  74. data/features/configuration_files/exclude_directives.feature +0 -35
  75. data/features/configuration_files/exclude_paths_directives.feature +0 -42
  76. data/features/configuration_files/masking_smells.feature +0 -94
  77. data/features/configuration_files/mix_accept_reject_setting.feature +0 -84
  78. data/features/configuration_files/reject_setting.feature +0 -89
  79. data/features/configuration_files/schema_validation.feature +0 -59
  80. data/features/configuration_files/show_configuration_file.feature +0 -44
  81. data/features/configuration_files/unused_private_method.feature +0 -68
  82. data/features/configuration_loading.feature +0 -91
  83. data/features/configuration_via_source_comments/erroneous_source_comments.feature +0 -68
  84. data/features/configuration_via_source_comments/well_formed_source_comments.feature +0 -116
  85. data/features/locales.feature +0 -32
  86. data/features/programmatic_access.feature +0 -41
  87. data/features/rake_task/rake_task.feature +0 -138
  88. data/features/reports/codeclimate.feature +0 -59
  89. data/features/reports/json.feature +0 -59
  90. data/features/reports/reports.feature +0 -219
  91. data/features/reports/yaml.feature +0 -52
  92. data/features/rspec_matcher.feature +0 -41
  93. data/features/samples.feature +0 -305
  94. data/features/step_definitions/.rubocop.yml +0 -5
  95. data/features/step_definitions/reek_steps.rb +0 -102
  96. data/features/step_definitions/sample_file_steps.rb +0 -63
  97. data/features/support/env.rb +0 -33
  98. data/features/todo_list.feature +0 -108
  99. data/samples/checkstyle.xml +0 -7
  100. data/samples/clean_source/clean.rb +0 -6
  101. data/samples/configuration/accepts_rejects_and_excludes_for_detectors.reek.yml +0 -29
  102. data/samples/configuration/accepts_rejects_and_excludes_for_directory_directives.reek.yml +0 -30
  103. data/samples/configuration/corrupt.reek +0 -1
  104. data/samples/configuration/empty.reek +0 -0
  105. data/samples/configuration/full_configuration.reek +0 -13
  106. data/samples/configuration/full_mask.reek +0 -6
  107. data/samples/configuration/home/home.reek.yml +0 -4
  108. data/samples/configuration/partial_mask.reek +0 -4
  109. data/samples/configuration/regular_configuration/.reek.yml +0 -4
  110. data/samples/configuration/regular_configuration/empty_sub_directory/.gitignore +0 -0
  111. data/samples/configuration/with_excluded_paths.reek +0 -5
  112. data/samples/no_config_file/.keep +0 -0
  113. data/samples/paths.rb +0 -5
  114. data/samples/smelly_source/inline.rb +0 -704
  115. data/samples/smelly_source/optparse.rb +0 -1788
  116. data/samples/smelly_source/redcloth.rb +0 -1130
  117. data/samples/smelly_source/ruby.rb +0 -368
  118. data/samples/smelly_source/smelly.rb +0 -7
  119. data/samples/source_with_exclude_paths/ignore_me/uncommunicative_method_name.rb +0 -5
  120. data/samples/source_with_exclude_paths/nested/ignore_me_as_well/irresponsible_module.rb +0 -2
  121. data/samples/source_with_exclude_paths/nested/uncommunicative_parameter_name.rb +0 -6
  122. data/samples/source_with_exclude_paths/nested/uncommunicative_variable_name.rb +0 -6
  123. data/samples/source_with_hidden_directories/.hidden/hidden.rb +0 -1
  124. data/samples/source_with_hidden_directories/not_hidden.rb +0 -1
  125. data/samples/source_with_non_ruby_files/gibberish +0 -1
  126. data/samples/source_with_non_ruby_files/python_source.py +0 -1
  127. data/samples/source_with_non_ruby_files/ruby.rb +0 -6
  128. data/spec/performance/reek/smell_detectors/runtime_speed_spec.rb +0 -15
  129. data/spec/quality/documentation_spec.rb +0 -41
  130. data/spec/quality/reek_source_spec.rb +0 -11
  131. data/spec/reek/ast/node_spec.rb +0 -211
  132. data/spec/reek/ast/object_refs_spec.rb +0 -83
  133. data/spec/reek/ast/reference_collector_spec.rb +0 -47
  134. data/spec/reek/ast/sexp_extensions_spec.rb +0 -498
  135. data/spec/reek/cli/application_spec.rb +0 -168
  136. data/spec/reek/cli/command/report_command_spec.rb +0 -44
  137. data/spec/reek/cli/command/todo_list_command_spec.rb +0 -86
  138. data/spec/reek/cli/options_spec.rb +0 -51
  139. data/spec/reek/cli/silencer_spec.rb +0 -28
  140. data/spec/reek/code_comment_spec.rb +0 -184
  141. data/spec/reek/configuration/app_configuration_spec.rb +0 -195
  142. data/spec/reek/configuration/configuration_file_finder_spec.rb +0 -230
  143. data/spec/reek/configuration/default_directive_spec.rb +0 -13
  144. data/spec/reek/configuration/directory_directives_spec.rb +0 -122
  145. data/spec/reek/configuration/excluded_paths_spec.rb +0 -25
  146. data/spec/reek/configuration/rake_task_converter_spec.rb +0 -33
  147. data/spec/reek/configuration/schema_validator_spec.rb +0 -165
  148. data/spec/reek/context/code_context_spec.rb +0 -192
  149. data/spec/reek/context/ghost_context_spec.rb +0 -60
  150. data/spec/reek/context/method_context_spec.rb +0 -72
  151. data/spec/reek/context/module_context_spec.rb +0 -55
  152. data/spec/reek/context/root_context_spec.rb +0 -12
  153. data/spec/reek/context/statement_counter_spec.rb +0 -24
  154. data/spec/reek/context_builder_spec.rb +0 -457
  155. data/spec/reek/detector_repository_spec.rb +0 -22
  156. data/spec/reek/documentation_link_spec.rb +0 -20
  157. data/spec/reek/errors/base_error_spec.rb +0 -13
  158. data/spec/reek/examiner_spec.rb +0 -309
  159. data/spec/reek/logging_error_handler_spec.rb +0 -24
  160. data/spec/reek/rake/task_spec.rb +0 -56
  161. data/spec/reek/report/code_climate/code_climate_configuration_spec.rb +0 -22
  162. data/spec/reek/report/code_climate/code_climate_fingerprint_spec.rb +0 -126
  163. data/spec/reek/report/code_climate/code_climate_formatter_spec.rb +0 -51
  164. data/spec/reek/report/code_climate/code_climate_report_spec.rb +0 -56
  165. data/spec/reek/report/html_report_spec.rb +0 -19
  166. data/spec/reek/report/json_report_spec.rb +0 -58
  167. data/spec/reek/report/location_formatter_spec.rb +0 -32
  168. data/spec/reek/report/progress_formatter_spec.rb +0 -68
  169. data/spec/reek/report/text_report_spec.rb +0 -89
  170. data/spec/reek/report/xml_report_spec.rb +0 -24
  171. data/spec/reek/report/yaml_report_spec.rb +0 -55
  172. data/spec/reek/report_spec.rb +0 -28
  173. data/spec/reek/smell_configuration_spec.rb +0 -56
  174. data/spec/reek/smell_detectors/attribute_spec.rb +0 -197
  175. data/spec/reek/smell_detectors/base_detector_spec.rb +0 -50
  176. data/spec/reek/smell_detectors/boolean_parameter_spec.rb +0 -93
  177. data/spec/reek/smell_detectors/class_variable_spec.rb +0 -106
  178. data/spec/reek/smell_detectors/control_parameter_spec.rb +0 -300
  179. data/spec/reek/smell_detectors/data_clump_spec.rb +0 -134
  180. data/spec/reek/smell_detectors/duplicate_method_call_spec.rb +0 -211
  181. data/spec/reek/smell_detectors/feature_envy_spec.rb +0 -295
  182. data/spec/reek/smell_detectors/instance_variable_assumption_spec.rb +0 -96
  183. data/spec/reek/smell_detectors/irresponsible_module_spec.rb +0 -226
  184. data/spec/reek/smell_detectors/long_parameter_list_spec.rb +0 -61
  185. data/spec/reek/smell_detectors/long_yield_list_spec.rb +0 -49
  186. data/spec/reek/smell_detectors/manual_dispatch_spec.rb +0 -75
  187. data/spec/reek/smell_detectors/missing_safe_method_spec.rb +0 -68
  188. data/spec/reek/smell_detectors/module_initialize_spec.rb +0 -77
  189. data/spec/reek/smell_detectors/nested_iterators_spec.rb +0 -333
  190. data/spec/reek/smell_detectors/nil_check_spec.rb +0 -100
  191. data/spec/reek/smell_detectors/repeated_conditional_spec.rb +0 -100
  192. data/spec/reek/smell_detectors/subclassed_from_core_class_spec.rb +0 -77
  193. data/spec/reek/smell_detectors/too_many_constants_spec.rb +0 -144
  194. data/spec/reek/smell_detectors/too_many_instance_variables_spec.rb +0 -132
  195. data/spec/reek/smell_detectors/too_many_methods_spec.rb +0 -54
  196. data/spec/reek/smell_detectors/too_many_statements_spec.rb +0 -90
  197. data/spec/reek/smell_detectors/uncommunicative_method_name_spec.rb +0 -78
  198. data/spec/reek/smell_detectors/uncommunicative_module_name_spec.rb +0 -78
  199. data/spec/reek/smell_detectors/uncommunicative_parameter_name_spec.rb +0 -147
  200. data/spec/reek/smell_detectors/uncommunicative_variable_name_spec.rb +0 -201
  201. data/spec/reek/smell_detectors/unused_parameters_spec.rb +0 -114
  202. data/spec/reek/smell_detectors/unused_private_method_spec.rb +0 -205
  203. data/spec/reek/smell_detectors/utility_function_spec.rb +0 -309
  204. data/spec/reek/smell_warning_spec.rb +0 -137
  205. data/spec/reek/source/source_code_spec.rb +0 -79
  206. data/spec/reek/source/source_locator_spec.rb +0 -166
  207. data/spec/reek/spec/should_reek_of_spec.rb +0 -153
  208. data/spec/reek/spec/should_reek_only_of_spec.rb +0 -91
  209. data/spec/reek/spec/should_reek_spec.rb +0 -52
  210. data/spec/reek/spec/smell_matcher_spec.rb +0 -87
  211. data/spec/reek/tree_dresser_spec.rb +0 -46
  212. data/spec/spec_helper.rb +0 -110
  213. data/tasks/configuration.rake +0 -18
  214. data/tasks/console.rake +0 -5
  215. data/tasks/reek.rake +0 -6
  216. data/tasks/rubocop.rake +0 -11
  217. data/tasks/test.rake +0 -32
@@ -1,37 +0,0 @@
1
- ## Introduction
2
-
3
- _Too Many Constants_ is a case of [Large Class](Large-Class.md).
4
-
5
- ## Example
6
-
7
- Given this configuration
8
-
9
- ```yaml
10
- TooManyConstants:
11
- max_constants: 3
12
- ```
13
-
14
- and this code:
15
-
16
- ```Ruby
17
- class Smelly
18
- CONST_1 = :dummy
19
- CONST_2 = :dummy
20
- CONST_3 = :dummy
21
- CONST_4 = :dummy
22
- end
23
- ```
24
-
25
- Reek would emit the following warning:
26
-
27
- ```
28
- test.rb -- 1 warning:
29
- [1]:TooManyConstants: Smelly has 4 constants
30
- ```
31
- ## Configuration
32
-
33
- Reek's _Too Many Constants_ detector offers the [Basic Smell Options](Basic-Smell-Options.md), plus:
34
-
35
- | Option | Value | Effect |
36
- | -------------------------|---------|---------|
37
- | `max_constants` | integer | The maximum number of constants that are permitted. Defaults to 5 |
@@ -1,43 +0,0 @@
1
- ## Introduction
2
-
3
- _Too Many Instance Variables_ is a case of [Large Class](Large-Class.md).
4
-
5
- ## Example
6
-
7
- Given this configuration
8
-
9
- ```yaml
10
- TooManyInstanceVariables:
11
- max_instance_variables: 3
12
- ```
13
-
14
- and this code:
15
-
16
- ```Ruby
17
- class Smelly
18
- def initialize
19
- @arg_1 = :dummy
20
- @arg_2 = :dummy
21
- @arg_3 = :dummy
22
- @arg_4 = :dummy
23
- end
24
- end
25
- ```
26
-
27
- Reek would emit the following warning:
28
-
29
- ```
30
- test.rb -- 5 warnings:
31
- [1]:TooManyInstanceVariables: Smelly has at least 4 instance variables
32
- ```
33
- ## Current Support in Reek
34
-
35
- Reek only counts the instance variables you use explicitly like in the example above. Class macros like `attr_accessor` are disregarded.
36
-
37
- ## Configuration
38
-
39
- Reek's _Too Many Instance Variables_ detector offers the [Basic Smell Options](Basic-Smell-Options.md), plus:
40
-
41
- | Option | Value | Effect |
42
- | -------------------------|---------|---------|
43
- | `max_instance_variables` | integer | The maximum number of instance variables that are permitted. Defaults to 4 |
@@ -1,56 +0,0 @@
1
- ## Introduction
2
-
3
- _Too Many Methods_ is a case of [Large Class](Large-Class.md).
4
-
5
- ## Example
6
-
7
- Given this configuration
8
-
9
- ```yaml
10
- TooManyMethods:
11
- max_methods: 3
12
- ```
13
-
14
- and this code:
15
-
16
- ```Ruby
17
- class Smelly
18
- def one; end
19
- def two; end
20
- def three; end
21
- def four; end
22
- end
23
- ```
24
-
25
- Reek would emit the following warning:
26
-
27
- ```
28
- test.rb -- 1 warning:
29
- [1]:TooManyMethods: Smelly has at least 4 methods
30
- ```
31
- ## Current Support in Reek
32
-
33
- Reek counts all the methods it can find in a class — instance *and* class
34
- methods. So given `max_methods` from above is 4, this:
35
-
36
- ```Ruby
37
- class Smelly
38
- class << self
39
- def one; end
40
- def two; end
41
- end
42
-
43
- def three; end
44
- def four; end
45
- end
46
- ```
47
-
48
- would cause Reek to emit the same warning as in the example above.
49
-
50
- ## Configuration
51
-
52
- Reek's _Too Many Methods_ detector offers the [Basic Smell Options](Basic-Smell-Options.md), plus:
53
-
54
- | Option | Value | Effect |
55
- | --------------|---------|---------|
56
- | `max_methods` | integer | The maximum number of methods that are permitted. Defaults to 15 |
@@ -1,54 +0,0 @@
1
- # Too Many Statements
2
-
3
- ## Introduction
4
-
5
- A method with _Too Many Statements_ is any method that has a large number of lines.
6
-
7
- ## Current Support in Reek
8
-
9
- _Too Many Statements_ warns about any method that has more than 5 statements.
10
- Reek's smell detector for _Too Many Statements_ counts +1 for every simple
11
- statement in a method and +1 for every statement within a control structure
12
- (`if`, `else`, `case`, `when`, `for`, `while`, `until`, `begin`, `rescue`) but
13
- it doesn't count the control structure itself.
14
-
15
- So the following method would score +6 in Reek's statement-counting algorithm:
16
-
17
- ```Ruby
18
- def parse(arg, argv, &error)
19
- if !(val = arg) and (argv.empty? or /\A-/ =~ (val = argv[0]))
20
- return nil, block, nil # +1
21
- end
22
- opt = (val = parse_arg(val, &error))[1] # +2
23
- val = conv_arg(*val) # +3
24
- if opt and !arg
25
- argv.shift # +4
26
- else
27
- val[0] = nil # +5
28
- end
29
- val # +6
30
- end
31
- ```
32
-
33
- (You might argue that the two assigments within the first @if@ should count as statements, and that perhaps the nested assignment should count as +2.)
34
-
35
- ## Configuration
36
-
37
- Reek's _Too Many Statements_ detector supports the [Basic Smell Options](Basic-Smell-Options.md), plus:
38
-
39
- | Option | Value | Effect |
40
- | ---------------|-------------|---------|
41
- | `max_statements` | integer | The maximum number of statements allowed in a method before a warning is issued. Defaults to 5. |
42
-
43
- _Too Many Statements_'s default configuration is:
44
-
45
- ```yaml
46
- ---
47
- TooManyStatements:
48
- enabled: true
49
- exclude:
50
- - initialize
51
- max_statements: 5
52
- ```
53
-
54
- By default, `initialize` is not checked for length; any class's constructor can be as long as necessary.
@@ -1,94 +0,0 @@
1
- # Uncommunicative Method Name
2
-
3
- ## Introduction
4
-
5
- An _Uncommunicative Method Name_ is a method name that doesn't communicate its
6
- 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 Method Name_ checks for:
12
-
13
- * single-character names
14
- * any name ending with a number
15
- * camelCaseMethodNames
16
-
17
- ## Configuration
18
-
19
- Reek's _Uncommunicative Method 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 | The set of names that Reek will accept (and not report) even if they match one of the `reject` expressions. |
26
-
27
- An example configuration could look like this:
28
-
29
- ```Yaml
30
- ---
31
- UncommunicativeMethodName:
32
- accept:
33
- - x
34
- - meth1
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 x; end # Should not be reported
46
- def meth1; end # Should not be reported
47
- def foobar; end # Should be reported
48
- def awesome_helper; end # Should be reported
49
- ```
50
-
51
- Reek would report:
52
-
53
- ```
54
- smelly.rb -- 2 warnings:
55
- [4]:UncommunicativeMethodName: awesome_helper has the name 'awesome_helper'
56
- [3]:UncommunicativeMethodName: foobar has the name 'foobar'
57
- ```
58
-
59
- ## Advanced configuration
60
-
61
- Sometimes just strings are not enough for configuration. E.g. consider this code sample:
62
-
63
- ```Ruby
64
- class Klass
65
- def foo; end
66
- def foobar; end;
67
- end
68
- ```
69
-
70
- and now imagine that you want to reject the name "foo" but not "foobar". This wouldn't be possible with just using strings.
71
- 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.
72
- Everything within the forward slashes will be loaded as a regex.
73
-
74
- A possible configuration that allows "foobar" but rejects "foo" could look like this:
75
-
76
- ```Yaml
77
- ---
78
- UncommunicativeMethodName:
79
- reject:
80
- - "/^foo$/"
81
- ```
82
-
83
- ## Reek 4
84
-
85
- In Reek 4 you could also pass regexes to `accept` or `reject`, meaning this was perfectly valid as well:
86
-
87
- ```yaml
88
- UncommunicativeMethodName:
89
- accept:
90
- - !ruby/regexp /foobar/
91
- ```
92
-
93
- Support for this has been scrapped with Reek 5 to make the Reek configuration more yaml standard compliant.
94
- You can still pass in regexes, you just have to wrap them into a string. Please see "Advanced configuration" above.
@@ -1,92 +0,0 @@
1
- # Uncommunicative Module Name
2
-
3
- ## Introduction
4
-
5
- An _Uncommunicative Module Name_ is a module name that doesn't communicate its
6
- 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 Module Name_ checks for:
12
-
13
- * single-character names
14
- * any name ending with a number
15
-
16
- ## Configuration
17
-
18
- Reek's _Uncommunicative Module Name_ detector supports the [Basic Smell Options](Basic-Smell-Options.md), plus:
19
-
20
- | Option | Value | Effect |
21
- | ---------------|-------------|---------|
22
- | `reject` | array of strings | The set of names that Reek uses to check for bad names. Defaults to single-letter names and names ending with a number. |
23
- | `accept` | array or strings | The set of names that Reek will accept (and not report) even if they match one of the `reject` expressions. Empty by default.|
24
-
25
- An example configuration could look like this:
26
-
27
- ```Yaml
28
- ---
29
- UncommunicativeModuleName:
30
- accept:
31
- - lassy
32
- - Util
33
- reject:
34
- - Helper
35
- ```
36
-
37
- Reek will convert whatever you give it as a string to the corresponding regex, so "Helper" from above will be converted to /Helper/ internally.
38
-
39
- Applying a configuration to a source file like this:
40
-
41
- ```Ruby
42
- class Classy1; end # Should not be reported
43
- class Util; end # Should not be reported
44
- class BaseHelper; end # Should be reported
45
- ```
46
-
47
- Reek would report:
48
-
49
- ```
50
- smelly.rb -- 1 warning:
51
- [3]:UncommunicativeModuleName: BaseHelper has the name 'BaseHelper'
52
- ```
53
-
54
- ## Advanced configuration
55
-
56
- Sometimes just strings are not enough for configuration. E.g. consider this code sample:
57
-
58
- ```Ruby
59
- class Klassy
60
- # ...
61
- end
62
-
63
- class KlassyModule
64
- # ...
65
- end
66
- ```
67
-
68
- and now imagine that you want to reject the name "Klassy" but not "KlassyModule". This wouldn't be possible with just using strings.
69
- 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.
70
- Everything within the forward slashes will be loaded as a regex.
71
-
72
- A possible configuration that allows "KlassyModule" but rejects "Klassy" could look like this:
73
-
74
- ```Yaml
75
- ---
76
- UncommunicativeModuleName:
77
- reject:
78
- - "/^Klassy$/"
79
- ```
80
-
81
- ## Reek 4
82
-
83
- In Reek 4 you could also pass regexes to `accept` or `reject`, meaning this was perfectly valid as well:
84
-
85
- ```yaml
86
- UncommunicativeModuleName:
87
- accept:
88
- - !ruby/regexp /foobar/
89
- ```
90
-
91
- Support for this has been scrapped with Reek 5 to make the Reek configuration more yaml standard compliant.
92
- You can still pass in regexes, you just have to wrap them into a string. Please see "Advanced configuration" above.
@@ -1,18 +0,0 @@
1
- # Uncommunicative Name
2
-
3
- ## Introduction
4
-
5
- An _Uncommunicative Name_ is a name that doesn't communicate its intent well enough.
6
-
7
- Poor names make it hard for the reader to build a mental picture of what's
8
- going on in the code. They can also be mis-interpreted; and they hurt the flow
9
- of reading, because the reader must slow down to interpret the names.
10
-
11
- ## Current Support in Reek
12
-
13
- Reek offers four checks in this category:
14
-
15
- * [Uncommunicative Method Name](Uncommunicative-Method-Name.md)
16
- * [Uncommunicative Module Name](Uncommunicative-Module-Name.md)
17
- * [Uncommunicative Parameter Name](Uncommunicative-Parameter-Name.md)
18
- * [Uncommunicative Variable Name](Uncommunicative-Variable-Name.md)
@@ -1,90 +0,0 @@
1
- # Uncommunicative Parameter Name
2
-
3
- ## Introduction
4
-
5
- An _Uncommunicative Parameter Name_ is a parameter name that doesn't
6
- communicate 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 Parameter Name_ checks for:
12
-
13
- * single-character names
14
- * any name ending with a number
15
- * camelCaseParameterNames
16
-
17
- ## Configuration
18
-
19
- Reek's _Uncommunicative Parameter Name_ detector supports the [Basic Smell Options](Basic-Smell-Options.md), plus:
20
-
21
- | Option | Value | Effect |
22
- | ---------|-------------|---------|
23
- | `reject` | array of strings | The set of names that Reek uses to check for bad names. Defaults to single-letter names, names containing an uppercase letter, names with a number at the end and '_'. |
24
- | `accept` | array of strings | The set of names that Reek will accept (and not report) even if they match one of the `reject` expressions. |
25
-
26
-
27
- An example configuration could look like this:
28
-
29
- ```Yaml
30
- ---
31
- UncommunicativeParameterName:
32
- accept:
33
- - x
34
- - arg1
35
- reject:
36
- - foobar
37
- ```
38
-
39
- Reek will convert whatever you give it as a string to the corresponding regex, so "foobar" from above will be converted to /foobar/ internally.
40
-
41
- Applying a configuration to a source file like this:
42
-
43
- ```Ruby
44
- def omg(x); x; end # Should not be reported
45
- def omg(arg1); arg1; end # Should not be reported
46
- def omg(foobar); foobar; end # Should be reported
47
- ```
48
-
49
- Reek would report:
50
-
51
- ```
52
- smelly.rb -- 1 warning:
53
- [3]:UncommunicativeParameterName: omg has the parameter name 'foobar'
54
- ```
55
-
56
- ## Advanced configuration
57
-
58
- Sometimes just strings are not enough for configuration. E.g. consider this code sample:
59
-
60
- ```Ruby
61
- class Klass
62
- def my_method(foo, foobar); end
63
- end
64
- ```
65
-
66
- and now imagine that you want to reject the name "foo" but not "foobar". This wouldn't be possible with just using strings.
67
- 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.
68
- Everything within the forward slashes will be loaded as a regex.
69
-
70
- A possible configuration that allows "foobar" but rejects "foo" could look like this:
71
-
72
- ```Yaml
73
- ---
74
- UncommunicativeParameterName:
75
- reject:
76
- - "/^foo$/"
77
- ```
78
-
79
- ## Reek 4
80
-
81
- In Reek 4 you could also pass regexes to `accept` or `reject`, meaning this was perfectly valid as well:
82
-
83
- ```yaml
84
- UncommunicativeParameterName:
85
- accept:
86
- - !ruby/regexp /foobar/
87
- ```
88
-
89
- Support for this has been scrapped with Reek 5 to make the Reek configuration more yaml standard compliant.
90
- You can still pass in regexes, you just have to wrap them into a string. Please see "Advanced configuration" above.