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,92 +0,0 @@
1
- # Missing Safe Method
2
-
3
- ## Introduction
4
-
5
- Candidate methods for the _Missing Safe Method_ smell are methods whose names
6
- end with an exclamation mark.
7
-
8
- An exclamation mark in method names means (the explanation below is taken from
9
- [here](http://dablog.rubypal.com/2007/8/15/bang-methods-or-danger-will-rubyist)):
10
-
11
- > The ! in method names that end with ! means, “This method is dangerous”—or,
12
- > more precisely, this method is the “dangerous” version of an otherwise
13
- > equivalent method, with the same name minus the !. “Danger” is relative; the
14
- > ! doesn’t mean anything at all unless the method name it’s in corresponds to
15
- > a similar but bang-less method name.
16
- >
17
- > So, for example, gsub! is the dangerous version of gsub. exit! is the
18
- > dangerous version of exit. flatten! is the dangerous version of flatten. And
19
- > so forth.
20
-
21
- Such a method is called _Missing Safe Method_ if and only if the non-bang
22
- version does not exist and this method is reported as a smell.
23
-
24
- Missing Safe Method was formerly known as Prima Donna Method.
25
-
26
- ## Example
27
-
28
- Given
29
-
30
- ```Ruby
31
- class C
32
- def foo; end
33
- def foo!; end
34
- def bar!; end
35
- end
36
- ```
37
-
38
- Reek would report the _Missing Safe Method_ smell for `bar!`, but not for `foo!`.
39
-
40
- Reek reports this smell only in a class context, not in a module context in order to allow perfectly legit code like this:
41
-
42
-
43
- ```Ruby
44
- class Parent
45
- def foo; end
46
- end
47
-
48
- module Dangerous
49
- def foo!; end
50
- end
51
-
52
- class Son < Parent
53
- include Dangerous
54
- end
55
-
56
- class Daughter < Parent
57
- end
58
- ```
59
-
60
- In this example, Reek would not report the _Missing Safe Method_ smell for the
61
- method `foo` of the `Dangerous` module.
62
-
63
- ## Configuration
64
-
65
- _Missing Safe Method_ offers the [Basic Smell Options](Basic-Smell-Options.md).
66
-
67
- ## Example configuration via source comment
68
-
69
- Imagine code like this:
70
-
71
- ```Ruby
72
- class Alfa
73
- def bravo!
74
- end
75
- end
76
- ```
77
-
78
- This would report:
79
-
80
- >>
81
- ruby.rb -- 1 warning:
82
- [1]:MissingSafeMethod: Alfa has missing safe method 'bravo!'
83
-
84
- If you want to suppress this warning you can do this via source comment like this:
85
-
86
- ```Ruby
87
- # :reek:MissingSafeMethod { exclude: [ bravo! ] }
88
- class Alfa
89
- def bravo!
90
- end
91
- end
92
- ```
@@ -1,62 +0,0 @@
1
- # Module Initialize
2
-
3
- ## Introduction
4
-
5
- A module is usually a mixin, so when an `#initialize` method is present it is
6
- hard to tell initialization order and parameters so having `#initialize`
7
- in a module is usually a bad idea.
8
-
9
- ## Example
10
-
11
- The `Foo` module below contains a method `initialize`. Although class `B` inherits from `A`, the inclusion of `Foo` stops `A#initialize` from being called.
12
-
13
- ```Ruby
14
- class A
15
- def initialize(a)
16
- @a = a
17
- end
18
- end
19
-
20
- module Foo
21
- def initialize(foo)
22
- @foo = foo
23
- end
24
- end
25
-
26
- class B < A
27
- include Foo
28
-
29
- def initialize(b)
30
- super('bar')
31
- @b = b
32
- end
33
- end
34
- ```
35
-
36
- A simple solution is to rename `Foo#initialize` and call that method by name:
37
-
38
- ```Ruby
39
- module Foo
40
- def setup_foo_module(foo)
41
- @foo = foo
42
- end
43
- end
44
-
45
- class B < A
46
- include Foo
47
-
48
- def initialize(b)
49
- super 'bar'
50
- setup_foo_module('foo')
51
- @b = b
52
- end
53
- end
54
- ```
55
-
56
- ## Current Support in Reek
57
-
58
- Reek warns about module initialize when an instance method named `initialize` is present in a module.
59
-
60
- ## Configuration
61
-
62
- Module Initialize supports the [Basic Smell Options](Basic-Smell-Options.md).
@@ -1,59 +0,0 @@
1
- # Nested Iterators
2
-
3
- ## Introduction
4
-
5
- A _Nested Iterator_ occurs when a block contains another block.
6
-
7
- ## Example
8
-
9
- Given
10
-
11
- ```Ruby
12
- class Duck
13
- class << self
14
- def duck_names
15
- %i!tick trick track!.each do |surname|
16
- %i!duck!.each do |last_name|
17
- puts "full name is #{surname} #{last_name}"
18
- end
19
- end
20
- end
21
- end
22
- end
23
- ```
24
-
25
- Reek would report the following warning:
26
-
27
- ```
28
- test.rb -- 1 warning:
29
- [5]:Duck#duck_names contains iterators nested 2 deep (NestedIterators)
30
- ```
31
-
32
- ## Current Support in Reek
33
-
34
- _Nested Iterators_ reports failing methods only once.
35
- `Object#tap` is ignored by default and thus does not count as iterator.
36
- Furthermore iterators without block arguments are not counted, e.g.:
37
-
38
-
39
- ```Ruby
40
- def foo
41
- before do
42
- item.each do |part|
43
- puts part
44
- end
45
- end
46
- end
47
- ```
48
-
49
- would not smell of NestedIterators (given a maximum allowed nesting of 1) since the
50
- `before` would not be counted (because it doesn't pass any arguments to the block).
51
-
52
- ## Configuration
53
-
54
- _Nested Iterators_ offers the [Basic Smell Options](Basic-Smell-Options.md), plus:
55
-
56
- | Option | Value | Effect |
57
- | ----------------------|---------|---------|
58
- | `max_allowed_nesting` | integer | The maximum depth of nested iterators. Defaults to 1 |
59
- | `ignore_iterators` | Array | List of iterators to be excluded from the smell check. Includes only `tap` at the moment|
data/docs/Nil-Check.md DELETED
@@ -1,47 +0,0 @@
1
- # Nil Check
2
-
3
- ## Introduction
4
-
5
- A _Nil Check_ is a type check. Failures of _Nil Check_ violate the
6
- ["tell, don't ask"](http://robots.thoughtbot.com/tell-dont-ask) principle.
7
- Additionally to that, type checks often mask bigger problems in your source
8
- code like not using OOP and / or polymorphism when you should.
9
-
10
- The _Nil Check_ code smell is a case of [Simulated Polymorphism](Simulated-Polymorphism.md).
11
-
12
- ## Example
13
-
14
- Given
15
-
16
- ```Ruby
17
- class Klass
18
- def nil_checker(argument)
19
- if argument.nil?
20
- puts "argument is nil!"
21
- end
22
- end
23
- end
24
- ```
25
-
26
- Reek would emit the following warning:
27
-
28
- ```
29
- test.rb -- 1 warning:
30
- [3]:Klass#nil_checker performs a nil-check. (NilCheck)
31
- ```
32
-
33
- ## Current Support in Reek
34
-
35
- _Nil Check_ reports use of
36
-
37
- * <code>.nil?</code> method
38
- * <code>==</code> and <code>===</code> operators when checking vs. <code>nil</code>
39
- * case statements that use syntax like <code>when nil</code>
40
-
41
- _Nil Check_ allows use of
42
-
43
- * the safe navigation operator like `foo&.bar`
44
-
45
- ## Configuration
46
-
47
- _Nil Check_ offers the [Basic Smell Options](Basic-Smell-Options.md).
@@ -1,129 +0,0 @@
1
- # RSpec matchers
2
-
3
- ## Introduction
4
-
5
- Reek offers matchers for RSpec you can easily include into your project.
6
-
7
- There are 3 matchers available:
8
-
9
- - `reek`
10
- - `reek_of`
11
- - `reek_only_of`
12
-
13
- ## Quickstart
14
-
15
- Let's install the dependencies:
16
-
17
- ```
18
- gem install reek
19
- gem install rspec
20
- ```
21
-
22
- And then use it like that in your spec file:
23
-
24
- ```Ruby
25
- require 'reek'
26
- require 'reek/spec'
27
- require 'rspec'
28
-
29
- RSpec.describe 'Reek Integration' do
30
- it 'works with Reek' do
31
- smelly_class = 'class C; def m; end; end'
32
- expect(smelly_class).not_to reek
33
- end
34
- end
35
- ```
36
-
37
- Running this via
38
-
39
- ```
40
- rspec reek-integration-spec.rb
41
- ```
42
-
43
- would give you:
44
-
45
- ```
46
- Failures:
47
-
48
- 1) Reek Integration works with Reek
49
- Failure/Error: expect(smelly_class).not_to reek
50
- Expected no smells, but got:
51
- C has no descriptive comment (IrresponsibleModule)
52
- C has the name 'C' (UncommunicativeModuleName)
53
- C#m has the name 'm' (UncommunicativeMethodName)
54
- # ./reek-integration-spec.rb:8:in `block (2 levels) in <top (required)>'
55
-
56
- Finished in 0.00284 seconds (files took 0.28815 seconds to load)
57
- 1 example, 1 failure
58
-
59
- Failed examples:
60
-
61
- rspec ./reek-integration-spec.rb:6 # Reek Integration works with Reek
62
- ```
63
-
64
- ## The matchers explained
65
-
66
- ### `reek`
67
-
68
- A very generic matcher that basically just tells you if something reeks, but
69
- not after what exactly.
70
- See the "Quickstart" example from above.
71
-
72
- ### `reek_of`
73
-
74
- Checks the target source code for instances of "smell type"
75
- and returns true only if it can find one of them that matches.
76
-
77
- You can pass the smell type you want to check for as String or as Symbol:
78
-
79
- - `:UtilityFunction`
80
- - `"UtilityFunction"`
81
-
82
- It is recommended to pass this as a symbol like `:UtilityFunction`. However we
83
- don't enforce this.
84
-
85
- Additionally you can be more specific and pass in "smell_details" you want to
86
- check for as well e.g. "name" or "count" (see the examples below). The
87
- parameters you can check for are depending on the smell you are checking for.
88
- For instance "count" doesn't make sense everywhere whereas "name" does in most
89
- cases. If you pass in a parameter that doesn't exist (e.g. you make a typo like
90
- "namme") Reek will raise an ArgumentError to give you a hint that you passed
91
- something that doesn't make much sense.
92
-
93
- So in a nutshell `reek_of` takes the following two arguments:
94
-
95
- - `smell_type` - The "smell type" we check for.
96
- - `smells_details` - A hash containing "smell warning" parameters
97
-
98
- **Examples**
99
-
100
- Without smell_details:
101
-
102
- ```Ruby
103
- reek_of(:FeatureEnvy)
104
- reek_of(:UtilityFunction)
105
- ```
106
-
107
- With smell_details:
108
-
109
- ```Ruby
110
- reek_of(:UncommunicativeParameterName, name: 'x2')
111
- reek_of(:DataClump, count: 3)
112
- ```
113
-
114
- **Examples from a real spec**
115
-
116
- ```Ruby
117
- expect(src).to reek_of(:DuplicateMethodCall, name: '@other.thing')
118
- ```
119
-
120
- ### reek_only_of
121
-
122
- See the documentaton for `reek_of`.
123
-
124
- **Notable differences to `reek_of`:**
125
-
126
- 1. `reek_of` doesn't mind if there are other smells of a different type.
127
- "reek_only_of" will fail in that case.
128
-
129
- 2. `reek_only_of` doesn't support the additional smell_details hash.
data/docs/Rake-Task.md DELETED
@@ -1,66 +0,0 @@
1
- # Rake Task
2
-
3
- ## Introduction
4
-
5
- Reek provides a Rake task that runs Reek on a set of source files. In its most simple form you just include something like that in your Rakefile:
6
-
7
- ```Ruby
8
- require 'reek/rake/task'
9
-
10
- Reek::Rake::Task.new do |t|
11
- t.fail_on_error = false
12
- end
13
- ```
14
-
15
- In its most simple form, that's it.
16
-
17
- When you now run:
18
-
19
- ```Bash
20
- rake -T
21
- ```
22
-
23
- you should see
24
-
25
- ```Bash
26
- rake reek # Check for code smells
27
- ```
28
-
29
- ## Configuration via task
30
-
31
- An more sophisticated rake task that would make use of all available configuration options could look like this:
32
-
33
- ```Ruby
34
- Reek::Rake::Task.new do |t|
35
- t.name = 'custom_rake' # Whatever name you want. Defaults to "reek".
36
- t.config_file = 'config/.reek.yml' # Defaults to nothing.
37
- t.source_files = 'vendor/**/*.rb' # Glob pattern to match source files. Defaults to lib/**/*.rb
38
- t.reek_opts = '-U' # Defaults to ''. You can pass all the options here in that are shown by "reek -h"
39
- t.fail_on_error = false # Defaults to true
40
- t.verbose = true # Defaults to false
41
- end
42
- ```
43
-
44
- Alternatively, you can create your own [Rake::FileList](http://rake.rubyforge.org/classes/Rake/FileList.html) and use that for `source_files`:
45
-
46
- ```Ruby
47
- Reek::Rake::Task.new do |t|
48
- t.source_files = FileList['lib/**/*.rb'].exclude('lib/templates/**/*.rb')
49
- end
50
- ```
51
-
52
- ## Configuration via environment variables
53
-
54
- You can overwrite the following attributes by environment variables:
55
-
56
- - "reek_opts" by using REEK_OPTS
57
- - "config_file" by using REEK_CFG
58
- - "source_files" by using REEK_SRC
59
-
60
- An example rake call using environment variables could look like this:
61
-
62
- ```Bash
63
- REEK_CFG="config/custom.reek" REEK_OPTS="-s" rake reek
64
- ```
65
-
66
- See also: [Reek-Driven-Development](Reek-Driven-Development.md)