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,84 +0,0 @@
1
- Feature: Mix `accept` and `reject` configuration settings
2
- In order to have a more fine-grained control over what Reek reports
3
- As a user
4
- I want to be able to mix the `accept` and `reject` setting
5
-
6
- Scenario: UncommunicativeMethodName
7
- Given a file named "config.reek" with:
8
- """
9
- ---
10
- detectors:
11
- UncommunicativeMethodName:
12
- accept:
13
- - x
14
- - meth1
15
- reject:
16
- - helper
17
- - foobar
18
- """
19
- And a file named "smelly.rb" with:
20
- """
21
- def x; end # Should not be reported
22
- def meth1; end # Should not be reported
23
- def foobar; end # Should be reported
24
- def awesome_helper; end # Should be reported
25
- """
26
- When I run reek -c config.reek smelly.rb
27
- Then it reports:
28
- """
29
- smelly.rb -- 2 warnings:
30
- [4]:UncommunicativeMethodName: awesome_helper has the name 'awesome_helper'
31
- [3]:UncommunicativeMethodName: foobar has the name 'foobar'
32
- """
33
-
34
- Scenario: UncommunicativeModuleName
35
- Given a file named "config.reek" with:
36
- """
37
- ---
38
- detectors:
39
- IrresponsibleModule:
40
- enabled: false
41
- UncommunicativeModuleName:
42
- accept:
43
- - lassy
44
- - M
45
- reject:
46
- - Helper
47
- """
48
- And a file named "smelly.rb" with:
49
- """
50
- class Classy1; end # Should not be reported
51
- class M; end # Should not be reported
52
- class BaseHelper; end # Should be reported
53
- """
54
- When I run reek -c config.reek smelly.rb
55
- Then it reports:
56
- """
57
- smelly.rb -- 1 warning:
58
- [3]:UncommunicativeModuleName: BaseHelper has the name 'BaseHelper'
59
- """
60
-
61
- Scenario: UncommunicativeParameterName
62
- Given a file named "config.reek" with:
63
- """
64
- ---
65
- detectors:
66
- UncommunicativeParameterName:
67
- accept:
68
- - x
69
- - arg1
70
- reject:
71
- - foobar
72
- """
73
- And a file named "smelly.rb" with:
74
- """
75
- def omg(x); x; end # Should not be reported
76
- def omg(arg1); arg1; end # Should not be reported
77
- def omg(foobar); foobar; end # Should be reported
78
- """
79
- When I run reek -c config.reek smelly.rb
80
- Then it reports:
81
- """
82
- smelly.rb -- 1 warning:
83
- [3]:UncommunicativeParameterName: omg has the parameter name 'foobar'
84
- """
@@ -1,89 +0,0 @@
1
- Feature: `reject` configuration setting
2
- In order to have a more fine-grained control over what Reek reports
3
- As a user
4
- I want to be able to reject specific patterns and names to include them into reporting
5
-
6
- Scenario: reject names
7
- Given a file named "config.reek" with:
8
- """
9
- ---
10
- detectors:
11
- UncommunicativeMethodName:
12
- reject:
13
- - awesome_helper
14
- - little_helper
15
- UncommunicativeParameterName:
16
- reject:
17
- - solid_argument
18
- - nifty_argument
19
- UncommunicativeModuleName:
20
- reject:
21
- - Dummy
22
- UncommunicativeVariableName:
23
- reject:
24
- - fine_name
25
- """
26
- And a file named "smelly.rb" with:
27
- """
28
- # Should report UncommunicativeModuleName
29
- class Dummy
30
- # Should report UncommunicativeMethodName and UncommunicativeParameterName
31
- def awesome_helper(solid_argument); solid_argument; end
32
- # Should report UncommunicativeMethodName and UncommunicativeParameterName
33
- def little_helper(nifty_argument); nifty_argument; end
34
- # Should not report UncommunicativeMethodName and UncommunicativeParameterName
35
- def meth(argument); argument; end
36
- fine_name = 2 # Should report UncommunicativeMethodName
37
- other_name = 2 # Should not report UncommunicativeMethodName
38
- end
39
- """
40
- When I run reek -c config.reek smelly.rb
41
- Then it reports:
42
- """
43
- smelly.rb -- 6 warnings:
44
- [4]:UncommunicativeMethodName: Dummy#awesome_helper has the name 'awesome_helper'
45
- [6]:UncommunicativeMethodName: Dummy#little_helper has the name 'little_helper'
46
- [2]:UncommunicativeModuleName: Dummy has the name 'Dummy'
47
- [4]:UncommunicativeParameterName: Dummy#awesome_helper has the parameter name 'solid_argument'
48
- [6]:UncommunicativeParameterName: Dummy#little_helper has the parameter name 'nifty_argument'
49
- [9]:UncommunicativeVariableName: Dummy has the variable name 'fine_name'
50
- """
51
-
52
- Scenario: Reject regexes
53
- Given a file named "config.reek" with:
54
- """
55
- ---
56
- detectors:
57
- UncommunicativeMethodName:
58
- accept:
59
- - /oobar/
60
- UncommunicativeParameterName:
61
- accept:
62
- - /ola/
63
- UncommunicativeModuleName:
64
- accept:
65
- - /lassy/
66
- UncommunicativeVariableName:
67
- reject:
68
- - /^fine_name/
69
- """
70
- And a file named "smelly.rb" with:
71
- """
72
- # Should not report UncommunicativeModuleName
73
- class Classy1
74
- # Should not report UncommunicativeMethodName and UncommunicativeParameterName
75
- def foobar1(hola1); hola1; end
76
- # Should report UncommunicativeMethodName and UncommunicativeParameterName
77
- def m2(a2); a2; end
78
- fine_name = 2 # Should report UncommunicativeMethodName
79
- my_fine_name = 2 # Should not report UncommunicativeMethodName
80
- end
81
- """
82
- When I run reek -c config.reek smelly.rb
83
- Then it reports:
84
- """
85
- smelly.rb -- 3 warnings:
86
- [6]:UncommunicativeMethodName: Classy1#m2 has the name 'm2'
87
- [6]:UncommunicativeParameterName: Classy1#m2 has the parameter name 'a2'
88
- [7]:UncommunicativeVariableName: Classy1 has the variable name 'fine_name'
89
- """
@@ -1,59 +0,0 @@
1
- Feature: Validate schema
2
- In order to ensure that I am using the right configuration
3
- As a user
4
- I want to be notified when I am using a configuration that violates our schema
5
-
6
- Scenario: Our generated default configuration
7
- Given our default configuration file
8
- And the clean file "clean.rb"
9
- When I run reek -c defaults.reek.yml clean.rb
10
- Then it succeeds
11
- And it reports nothing
12
-
13
- Scenario: Detectors, directories and exclude paths all mixed
14
- Given a file named "config.reek" with:
15
- """
16
- ---
17
- detectors:
18
- IrresponsibleModule:
19
- enabled: false
20
- NestedIterators:
21
- exclude:
22
- - "MyWorker#self.class_method"
23
- - "AnotherWorker#instance_method"
24
- DataClump:
25
- max_copies: 3
26
- min_clump_size: 3
27
-
28
- directories:
29
- "web_app/app/controllers":
30
- NestedIterators:
31
- enabled: false
32
- "web_app/app/helpers":
33
- UtilityFunction:
34
- enabled: false
35
-
36
- exclude_paths:
37
- - lib/legacy
38
- """
39
- And a directory named "lib/legacy"
40
- And the clean file "clean.rb"
41
- When I run reek -c config.reek clean.rb
42
- Then it succeeds
43
- And it reports nothing
44
-
45
- Scenario: Invalid detector name
46
- Given a file named "config.reek" with:
47
- """
48
- ---
49
- detectors:
50
- DoesNotExist:
51
- enabled: true
52
- """
53
- And the clean file "clean.rb"
54
- When I run reek -c config.reek clean.rb
55
- Then the exit status indicates an error
56
- And stderr reports:
57
- """
58
- Error: We found some problems with your configuration file: [/detectors/DoesNotExist] key 'DoesNotExist:' is undefined.
59
- """
@@ -1,44 +0,0 @@
1
- Feature: Show configuration file
2
- With Reeks dynamic mechanism of finding a configuration file you might run into a situation where you are not
3
- 100% sure what configuration file Reek is using. E.g. you have a project specific configuration file in your
4
- project root and also another Reek configuration in your HOME directory that you use for all your other projects
5
- and for whatever reasons Reek seems to be using another configuration file than the one you assumed it would.
6
- In this case you can pass the flag `--show-configuration-path` to Reek which will cause Reek to output the path
7
- to the configuration file it is using.
8
-
9
- Scenario: Default configuration file present
10
- Given the clean file "clean.rb"
11
- And an empty file named ".reek.yml"
12
- When I run reek --show-configuration-path clean.rb
13
- Then it reports:
14
- """
15
- Using '.reek.yml' as configuration file.
16
- """
17
-
18
- Scenario: Non-default configuration file passed via CLI
19
- Given the clean file "clean.rb"
20
- And an empty file named "config.reek"
21
- When I run reek --show-configuration-path -c config.reek clean.rb
22
- Then it reports:
23
- """
24
- Using 'config.reek' as configuration file.
25
- """
26
-
27
- Scenario: Display the right configuration file even when there are multiple files present
28
- Given the clean file "clean.rb"
29
- And an empty file named ".reek.yml"
30
- And an empty file named "config.reek"
31
- When I run reek --show-configuration-path -c config.reek clean.rb
32
- Then it reports:
33
- """
34
- Using 'config.reek' as configuration file.
35
- """
36
-
37
- Scenario: Use configuration file we find when traversing up the directory tree
38
- Given the clean file "clean.rb"
39
- And with a configuration file that is further up in the directory tree
40
- When I run reek --show-configuration-path clean.rb
41
- Then it reports:
42
- """
43
- Using '../../.reek.yml' as configuration file.
44
- """
@@ -1,68 +0,0 @@
1
- Feature: Unused Private Method detector
2
- This detector is a little special in the sense that it takes class contexts but analyzes
3
- methods (and thus, is configured in regards to methods) so we need to make sure
4
- that our configuration handling still works.
5
-
6
- Scenario: Differentiate between contexts when excluding them
7
- Given a file named "config.reek" with:
8
- """
9
- ---
10
- detectors:
11
- IrresponsibleModule:
12
- enabled: false
13
- UnusedPrivateMethod:
14
- enabled: true
15
- exclude:
16
- - Outer::Awesome#foobar
17
- """
18
- And a file named "sample.rb" with:
19
- """
20
- module Outer
21
- class Smelly
22
- private
23
- def foobar; end # Should report UnusedPrivateMethod
24
- end
25
- class Awesome
26
- private
27
- def foobar; end # Should not report UnusedPrivateMethod
28
- end
29
- end
30
- """
31
- When I run reek -c config.reek sample.rb
32
- Then it reports:
33
- """
34
- sample.rb -- 1 warning:
35
- [4]:UnusedPrivateMethod: Outer::Smelly has the unused private instance method 'foobar'
36
- """
37
-
38
- Scenario: Use regexes for excluding contexts
39
- Given a file named "config.reek" with:
40
- """
41
- ---
42
- detectors:
43
- IrresponsibleModule:
44
- enabled: false
45
- UnusedPrivateMethod:
46
- enabled: true
47
- exclude:
48
- - wesome#foo
49
- """
50
- And a file named "sample.rb" with:
51
- """
52
- module Outer
53
- class Smelly
54
- private
55
- def foobar; end # Should report UnusedPrivateMethod
56
- end
57
- class Awesome
58
- private
59
- def foobar; end # Should not report UnusedPrivateMethod
60
- end
61
- end
62
- """
63
- When I run reek -c config.reek sample.rb
64
- Then it reports:
65
- """
66
- sample.rb -- 1 warning:
67
- [4]:UnusedPrivateMethod: Outer::Smelly has the unused private instance method 'foobar'
68
- """
@@ -1,91 +0,0 @@
1
- Feature: Offer different ways how to load configuration
2
-
3
- Reek can be configured in two ways:
4
- - Using the cli "-c" switch to pass a configuration file on the command line.
5
- - Having a Reek configuration file that is automatically found. Reek will
6
- look for a file ending in .reek.yml in the following places, in order:
7
- - The current working directory
8
- - The working directory's ancestor directories, traversing all the way up
9
- to the root.
10
- - Your HOME directory
11
- Reek will check these in order and stop after the first file found.
12
-
13
- Scenario: Default configuration
14
- Given the smelly file 'smelly.rb'
15
- When I run reek smelly.rb
16
- Then the exit status indicates smells
17
- And it reports:
18
- """
19
- smelly.rb -- 2 warnings:
20
- [4]:UncommunicativeMethodName: Smelly#x has the name 'x'
21
- [5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
22
- """
23
-
24
- Scenario: Configuration via CLI
25
- Given the smelly file 'smelly.rb'
26
- And a configuration file 'full_mask.reek'
27
- When I run reek -c full_mask.reek smelly.rb
28
- Then it reports no errors
29
- And it succeeds
30
-
31
- Scenario: Configuration file in working directory
32
- Given the smelly file 'smelly.rb'
33
- And a file named ".reek.yml" with:
34
- """
35
- ---
36
- detectors:
37
- UncommunicativeMethodName:
38
- enabled: false
39
- UncommunicativeVariableName:
40
- enabled: false
41
- """
42
- When I run reek smelly.rb
43
- Then it reports no errors
44
- And it succeeds
45
-
46
- Scenario: Do not use the default config file when we explicitly specify one configuration file
47
- Given the smelly file 'smelly.rb'
48
- And a file named "config.reek" with:
49
- """
50
- ---
51
- detectors:
52
- UncommunicativeMethodName:
53
- enabled: false
54
- """
55
- And a file named ".reek.yml" with:
56
- """
57
- ---
58
- UncommunicativeVariableName:
59
- enabled: false
60
- """
61
- When I run reek -c config.reek smelly.rb
62
- Then the exit status indicates smells
63
- And it reports:
64
- """
65
- smelly.rb -- 1 warning:
66
- [5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
67
- """
68
-
69
- Scenario: Prefer the default config file over other configuration files
70
- Given the smelly file 'smelly.rb'
71
- And a file named "config.reek" with:
72
- """
73
- ---
74
- detectors:
75
- UncommunicativeMethodName:
76
- enabled: false
77
- """
78
- And a file named ".reek.yml" with:
79
- """
80
- ---
81
- detectors:
82
- UncommunicativeVariableName:
83
- enabled: false
84
- """
85
- When I run reek smelly.rb
86
- Then the exit status indicates smells
87
- And it reports:
88
- """
89
- smelly.rb -- 1 warning:
90
- [4]:UncommunicativeMethodName: Smelly#x has the name 'x'
91
- """
@@ -1,68 +0,0 @@
1
- Feature: Erroneous source comments are handled properly
2
- Erroneous source comments should be handled in a way that is intuitive and helpful
3
- for the user. Reek should neither crash nor silently swallow it.
4
- If there is something wrong - no matter how small it is - Reek should report it back
5
- to the user right away so the user can actually do something about it.
6
- If a user tries to deactivate an unknown smell detector (e.g. because he made a typo)
7
- we should just skip this file and tell the user about it so he can fix it and then
8
- re-run Reek.
9
-
10
- Scenario: Unknown smell detector
11
- Given a file named "bad_comment.rb" with:
12
- """
13
- # Test class
14
- # :reek:UnknownDetectorName
15
- def x
16
- end
17
- """
18
- When I run reek bad_comment.rb
19
- Then it reports the error "Error: You are trying to configure an unknown smell detector 'UnknownDetectorName'"
20
-
21
- Scenario: One good file, one bad file
22
- Given a file named "bad_comment.rb" with:
23
- """
24
- # Test class
25
- # :reek:UnknownDetectorName
26
- def x
27
- end
28
- """
29
- Given the smelly file 'smelly.rb'
30
- When I run reek bad_comment.rb smelly.rb
31
- Then it reports the error "Error: You are trying to configure an unknown smell detector 'UnknownDetectorName'"
32
- And the exit status indicates smells
33
- And it reports:
34
- """
35
- smelly.rb -- 2 warnings:
36
- [4]:UncommunicativeMethodName: Smelly#x has the name 'x'
37
- [5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
38
- 2 total warnings
39
- """
40
-
41
- Scenario: Garbage as content
42
- Given a file named "bad_comment.rb" with:
43
- """
44
- # Test class
45
- # :reek:UncommunicativeMethodName { thats: a: bad: config }
46
- def x
47
- end
48
- """
49
- When I run reek bad_comment.rb
50
- Then it reports the error "Error: You are trying to configure the smell detector 'UncommunicativeMethodName'"
51
- And it reports the error "Unfortunately we cannot parse the configuration you have given."
52
- And it reports the error "The source is 'bad_comment.rb'"
53
- And it reports the error "the comment belongs to the expression starting in line 3"
54
-
55
- Scenario: Bad configuration key
56
- Given a file named "bad_comment.rb" with:
57
- """
58
- # Test class
59
- # exclude -> elude and accept -> accipt are bad keys
60
- # :reek:UncommunicativeMethodName { elude: 'foo', accipt: 'bar' }
61
- def x
62
- end
63
- """
64
- When I run reek bad_comment.rb
65
- Then it reports the error "Error: You are trying to configure the smell detector 'UncommunicativeMethodName'"
66
- And it reports the error "in one of your source code comments with the unknown option 'elude', 'accipt'"
67
- And it reports the error "The source is 'bad_comment.rb'"
68
- And it reports the error "the comment belongs to the expression starting in line 4"