reek 6.0.2 → 6.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (271) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +13 -0
  3. data/.github/workflows/ruby.yml +57 -0
  4. data/.rubocop.yml +6 -12
  5. data/.rubocop_todo.yml +6 -4
  6. data/CHANGELOG.md +95 -0
  7. data/CONTRIBUTING.md +10 -10
  8. data/Dockerfile +1 -1
  9. data/Gemfile +8 -7
  10. data/README.md +29 -29
  11. data/bin/code_climate_reek +56 -8
  12. data/lib/reek/ast/ast_node_class_map.rb +1 -1
  13. data/lib/reek/ast/node.rb +1 -1
  14. data/lib/reek/ast/sexp_extensions/arguments.rb +20 -0
  15. data/lib/reek/ast/sexp_extensions/case.rb +1 -1
  16. data/lib/reek/ast/sexp_extensions/if.rb +1 -1
  17. data/lib/reek/ast/sexp_extensions/send.rb +22 -7
  18. data/lib/reek/cli/command/todo_list_command.rb +3 -3
  19. data/lib/reek/cli/options.rb +6 -6
  20. data/lib/reek/{report/code_climate → code_climate}/code_climate_configuration.rb +1 -1
  21. data/lib/reek/{report/code_climate → code_climate}/code_climate_configuration.yml +41 -41
  22. data/lib/reek/{report/code_climate → code_climate}/code_climate_fingerprint.rb +2 -2
  23. data/lib/reek/{report/code_climate → code_climate}/code_climate_formatter.rb +2 -4
  24. data/lib/reek/{report/code_climate → code_climate}/code_climate_report.rb +3 -3
  25. data/lib/reek/code_comment.rb +25 -20
  26. data/lib/reek/configuration/app_configuration.rb +5 -5
  27. data/lib/reek/configuration/configuration_converter.rb +1 -1
  28. data/lib/reek/configuration/configuration_file_finder.rb +5 -4
  29. data/lib/reek/configuration/default_directive.rb +1 -1
  30. data/lib/reek/configuration/directory_directives.rb +1 -1
  31. data/lib/reek/configuration/excluded_paths.rb +3 -2
  32. data/lib/reek/configuration/schema.rb +177 -0
  33. data/lib/reek/configuration/schema_validator.rb +12 -13
  34. data/lib/reek/context/attribute_context.rb +1 -1
  35. data/lib/reek/context/code_context.rb +1 -1
  36. data/lib/reek/context/method_context.rb +1 -1
  37. data/lib/reek/context/module_context.rb +4 -0
  38. data/lib/reek/context/refinement_context.rb +16 -0
  39. data/lib/reek/context/send_context.rb +7 -1
  40. data/lib/reek/context_builder.rb +17 -3
  41. data/lib/reek/documentation_link.rb +3 -5
  42. data/lib/reek/errors/bad_detector_configuration_key_in_comment_error.rb +2 -2
  43. data/lib/reek/errors/bad_detector_in_comment_error.rb +2 -2
  44. data/lib/reek/errors/encoding_error.rb +1 -1
  45. data/lib/reek/errors/garbage_detector_configuration_in_comment_error.rb +2 -2
  46. data/lib/reek/errors/incomprehensible_source_error.rb +1 -1
  47. data/lib/reek/errors/legacy_comment_separator_error.rb +2 -2
  48. data/lib/reek/errors/syntax_error.rb +1 -1
  49. data/lib/reek/rake/task.rb +5 -5
  50. data/lib/reek/smell_detectors/base_detector.rb +1 -1
  51. data/lib/reek/smell_detectors/class_variable.rb +2 -2
  52. data/lib/reek/smell_detectors/control_parameter_helpers/candidate.rb +6 -6
  53. data/lib/reek/smell_detectors/control_parameter_helpers/control_parameter_finder.rb +1 -1
  54. data/lib/reek/smell_detectors/duplicate_method_call.rb +5 -5
  55. data/lib/reek/smell_detectors/instance_variable_assumption.rb +8 -8
  56. data/lib/reek/smell_detectors/nested_iterators.rb +4 -3
  57. data/lib/reek/smell_detectors/unused_private_method.rb +3 -2
  58. data/lib/reek/smell_warning.rb +1 -1
  59. data/lib/reek/source/source_locator.rb +1 -3
  60. data/lib/reek/spec/should_reek_of.rb +11 -9
  61. data/lib/reek/spec.rb +1 -1
  62. data/lib/reek/version.rb +2 -2
  63. data/reek.gemspec +29 -25
  64. metadata +37 -250
  65. data/.travis.yml +0 -40
  66. data/docs/API.md +0 -174
  67. data/docs/Attribute.md +0 -39
  68. data/docs/Basic-Smell-Options.md +0 -85
  69. data/docs/Boolean-Parameter.md +0 -54
  70. data/docs/Class-Variable.md +0 -40
  71. data/docs/Code-Smells.md +0 -39
  72. data/docs/Command-Line-Options.md +0 -119
  73. data/docs/Control-Couple.md +0 -26
  74. data/docs/Control-Parameter.md +0 -32
  75. data/docs/Data-Clump.md +0 -46
  76. data/docs/Duplicate-Method-Call.md +0 -264
  77. data/docs/Feature-Envy.md +0 -93
  78. data/docs/How-To-Write-New-Detectors.md +0 -132
  79. data/docs/How-reek-works-internally.md +0 -114
  80. data/docs/Instance-Variable-Assumption.md +0 -163
  81. data/docs/Irresponsible-Module.md +0 -47
  82. data/docs/Large-Class.md +0 -16
  83. data/docs/Long-Parameter-List.md +0 -39
  84. data/docs/Long-Yield-List.md +0 -37
  85. data/docs/Manual-Dispatch.md +0 -30
  86. data/docs/Missing-Safe-Method.md +0 -92
  87. data/docs/Module-Initialize.md +0 -62
  88. data/docs/Nested-Iterators.md +0 -59
  89. data/docs/Nil-Check.md +0 -47
  90. data/docs/RSpec-matchers.md +0 -129
  91. data/docs/Rake-Task.md +0 -66
  92. data/docs/Reek-4-to-Reek-5-migration.md +0 -188
  93. data/docs/Reek-Driven-Development.md +0 -46
  94. data/docs/Repeated-Conditional.md +0 -47
  95. data/docs/Simulated-Polymorphism.md +0 -16
  96. data/docs/Smell-Suppression.md +0 -96
  97. data/docs/Style-Guide.md +0 -19
  98. data/docs/Subclassed-From-Core-Class.md +0 -79
  99. data/docs/Too-Many-Constants.md +0 -37
  100. data/docs/Too-Many-Instance-Variables.md +0 -43
  101. data/docs/Too-Many-Methods.md +0 -56
  102. data/docs/Too-Many-Statements.md +0 -54
  103. data/docs/Uncommunicative-Method-Name.md +0 -94
  104. data/docs/Uncommunicative-Module-Name.md +0 -92
  105. data/docs/Uncommunicative-Name.md +0 -18
  106. data/docs/Uncommunicative-Parameter-Name.md +0 -90
  107. data/docs/Uncommunicative-Variable-Name.md +0 -96
  108. data/docs/Unused-Parameters.md +0 -28
  109. data/docs/Unused-Private-Method.md +0 -101
  110. data/docs/Utility-Function.md +0 -56
  111. data/docs/Versioning-Policy.md +0 -7
  112. data/docs/YAML-Reports.md +0 -93
  113. data/docs/defaults.reek.yml +0 -129
  114. data/docs/templates/default/docstring/html/public_api_marker.erb +0 -3
  115. data/docs/templates/default/docstring/setup.rb +0 -37
  116. data/docs/templates/default/fulldoc/html/css/common.css +0 -1
  117. data/docs/yard_plugin.rb +0 -17
  118. data/features/command_line_interface/basic_usage.feature +0 -15
  119. data/features/command_line_interface/options.feature +0 -123
  120. data/features/command_line_interface/show_progress.feature +0 -33
  121. data/features/command_line_interface/smell_selection.feature +0 -15
  122. data/features/command_line_interface/smells_count.feature +0 -38
  123. data/features/command_line_interface/stdin.feature +0 -65
  124. data/features/configuration_files/accept_setting.feature +0 -87
  125. data/features/configuration_files/directory_specific_directives.feature +0 -274
  126. data/features/configuration_files/exclude_directives.feature +0 -35
  127. data/features/configuration_files/exclude_paths_directives.feature +0 -42
  128. data/features/configuration_files/masking_smells.feature +0 -94
  129. data/features/configuration_files/mix_accept_reject_setting.feature +0 -84
  130. data/features/configuration_files/reject_setting.feature +0 -89
  131. data/features/configuration_files/schema_validation.feature +0 -59
  132. data/features/configuration_files/show_configuration_file.feature +0 -44
  133. data/features/configuration_files/unused_private_method.feature +0 -68
  134. data/features/configuration_loading.feature +0 -91
  135. data/features/configuration_via_source_comments/erroneous_source_comments.feature +0 -68
  136. data/features/configuration_via_source_comments/well_formed_source_comments.feature +0 -116
  137. data/features/locales.feature +0 -32
  138. data/features/programmatic_access.feature +0 -41
  139. data/features/rake_task/rake_task.feature +0 -138
  140. data/features/reports/codeclimate.feature +0 -59
  141. data/features/reports/json.feature +0 -59
  142. data/features/reports/reports.feature +0 -219
  143. data/features/reports/yaml.feature +0 -52
  144. data/features/rspec_matcher.feature +0 -41
  145. data/features/samples.feature +0 -305
  146. data/features/step_definitions/.rubocop.yml +0 -5
  147. data/features/step_definitions/reek_steps.rb +0 -102
  148. data/features/step_definitions/sample_file_steps.rb +0 -63
  149. data/features/support/env.rb +0 -33
  150. data/features/todo_list.feature +0 -108
  151. data/lib/reek/configuration/schema.yml +0 -210
  152. data/samples/checkstyle.xml +0 -7
  153. data/samples/clean_source/clean.rb +0 -6
  154. data/samples/configuration/accepts_rejects_and_excludes_for_detectors.reek.yml +0 -29
  155. data/samples/configuration/accepts_rejects_and_excludes_for_directory_directives.reek.yml +0 -30
  156. data/samples/configuration/corrupt.reek +0 -1
  157. data/samples/configuration/empty.reek +0 -0
  158. data/samples/configuration/full_configuration.reek +0 -13
  159. data/samples/configuration/full_mask.reek +0 -6
  160. data/samples/configuration/home/home.reek.yml +0 -4
  161. data/samples/configuration/partial_mask.reek +0 -4
  162. data/samples/configuration/regular_configuration/.reek.yml +0 -4
  163. data/samples/configuration/regular_configuration/empty_sub_directory/.gitignore +0 -0
  164. data/samples/configuration/with_excluded_paths.reek +0 -5
  165. data/samples/no_config_file/.keep +0 -0
  166. data/samples/paths.rb +0 -5
  167. data/samples/smelly_source/inline.rb +0 -704
  168. data/samples/smelly_source/optparse.rb +0 -1788
  169. data/samples/smelly_source/redcloth.rb +0 -1130
  170. data/samples/smelly_source/ruby.rb +0 -368
  171. data/samples/smelly_source/smelly.rb +0 -7
  172. data/samples/source_with_exclude_paths/ignore_me/uncommunicative_method_name.rb +0 -5
  173. data/samples/source_with_exclude_paths/nested/ignore_me_as_well/irresponsible_module.rb +0 -2
  174. data/samples/source_with_exclude_paths/nested/uncommunicative_parameter_name.rb +0 -6
  175. data/samples/source_with_exclude_paths/nested/uncommunicative_variable_name.rb +0 -6
  176. data/samples/source_with_hidden_directories/.hidden/hidden.rb +0 -1
  177. data/samples/source_with_hidden_directories/not_hidden.rb +0 -1
  178. data/samples/source_with_non_ruby_files/gibberish +0 -1
  179. data/samples/source_with_non_ruby_files/python_source.py +0 -1
  180. data/samples/source_with_non_ruby_files/ruby.rb +0 -6
  181. data/spec/performance/reek/smell_detectors/runtime_speed_spec.rb +0 -15
  182. data/spec/quality/documentation_spec.rb +0 -41
  183. data/spec/quality/reek_source_spec.rb +0 -11
  184. data/spec/reek/ast/node_spec.rb +0 -211
  185. data/spec/reek/ast/object_refs_spec.rb +0 -83
  186. data/spec/reek/ast/reference_collector_spec.rb +0 -47
  187. data/spec/reek/ast/sexp_extensions_spec.rb +0 -498
  188. data/spec/reek/cli/application_spec.rb +0 -168
  189. data/spec/reek/cli/command/report_command_spec.rb +0 -44
  190. data/spec/reek/cli/command/todo_list_command_spec.rb +0 -86
  191. data/spec/reek/cli/options_spec.rb +0 -51
  192. data/spec/reek/cli/silencer_spec.rb +0 -28
  193. data/spec/reek/code_comment_spec.rb +0 -184
  194. data/spec/reek/configuration/app_configuration_spec.rb +0 -195
  195. data/spec/reek/configuration/configuration_file_finder_spec.rb +0 -230
  196. data/spec/reek/configuration/default_directive_spec.rb +0 -13
  197. data/spec/reek/configuration/directory_directives_spec.rb +0 -122
  198. data/spec/reek/configuration/excluded_paths_spec.rb +0 -16
  199. data/spec/reek/configuration/rake_task_converter_spec.rb +0 -33
  200. data/spec/reek/configuration/schema_validator_spec.rb +0 -165
  201. data/spec/reek/context/code_context_spec.rb +0 -192
  202. data/spec/reek/context/ghost_context_spec.rb +0 -60
  203. data/spec/reek/context/method_context_spec.rb +0 -72
  204. data/spec/reek/context/module_context_spec.rb +0 -55
  205. data/spec/reek/context/root_context_spec.rb +0 -12
  206. data/spec/reek/context/statement_counter_spec.rb +0 -24
  207. data/spec/reek/context_builder_spec.rb +0 -457
  208. data/spec/reek/detector_repository_spec.rb +0 -22
  209. data/spec/reek/documentation_link_spec.rb +0 -20
  210. data/spec/reek/errors/base_error_spec.rb +0 -13
  211. data/spec/reek/examiner_spec.rb +0 -309
  212. data/spec/reek/logging_error_handler_spec.rb +0 -24
  213. data/spec/reek/rake/task_spec.rb +0 -56
  214. data/spec/reek/report/code_climate/code_climate_configuration_spec.rb +0 -22
  215. data/spec/reek/report/code_climate/code_climate_fingerprint_spec.rb +0 -126
  216. data/spec/reek/report/code_climate/code_climate_formatter_spec.rb +0 -51
  217. data/spec/reek/report/code_climate/code_climate_report_spec.rb +0 -56
  218. data/spec/reek/report/html_report_spec.rb +0 -19
  219. data/spec/reek/report/json_report_spec.rb +0 -58
  220. data/spec/reek/report/location_formatter_spec.rb +0 -32
  221. data/spec/reek/report/progress_formatter_spec.rb +0 -68
  222. data/spec/reek/report/text_report_spec.rb +0 -89
  223. data/spec/reek/report/xml_report_spec.rb +0 -24
  224. data/spec/reek/report/yaml_report_spec.rb +0 -55
  225. data/spec/reek/report_spec.rb +0 -28
  226. data/spec/reek/smell_configuration_spec.rb +0 -56
  227. data/spec/reek/smell_detectors/attribute_spec.rb +0 -197
  228. data/spec/reek/smell_detectors/base_detector_spec.rb +0 -50
  229. data/spec/reek/smell_detectors/boolean_parameter_spec.rb +0 -93
  230. data/spec/reek/smell_detectors/class_variable_spec.rb +0 -106
  231. data/spec/reek/smell_detectors/control_parameter_spec.rb +0 -300
  232. data/spec/reek/smell_detectors/data_clump_spec.rb +0 -134
  233. data/spec/reek/smell_detectors/duplicate_method_call_spec.rb +0 -211
  234. data/spec/reek/smell_detectors/feature_envy_spec.rb +0 -295
  235. data/spec/reek/smell_detectors/instance_variable_assumption_spec.rb +0 -96
  236. data/spec/reek/smell_detectors/irresponsible_module_spec.rb +0 -226
  237. data/spec/reek/smell_detectors/long_parameter_list_spec.rb +0 -61
  238. data/spec/reek/smell_detectors/long_yield_list_spec.rb +0 -49
  239. data/spec/reek/smell_detectors/manual_dispatch_spec.rb +0 -75
  240. data/spec/reek/smell_detectors/missing_safe_method_spec.rb +0 -68
  241. data/spec/reek/smell_detectors/module_initialize_spec.rb +0 -77
  242. data/spec/reek/smell_detectors/nested_iterators_spec.rb +0 -333
  243. data/spec/reek/smell_detectors/nil_check_spec.rb +0 -100
  244. data/spec/reek/smell_detectors/repeated_conditional_spec.rb +0 -100
  245. data/spec/reek/smell_detectors/subclassed_from_core_class_spec.rb +0 -77
  246. data/spec/reek/smell_detectors/too_many_constants_spec.rb +0 -144
  247. data/spec/reek/smell_detectors/too_many_instance_variables_spec.rb +0 -132
  248. data/spec/reek/smell_detectors/too_many_methods_spec.rb +0 -54
  249. data/spec/reek/smell_detectors/too_many_statements_spec.rb +0 -90
  250. data/spec/reek/smell_detectors/uncommunicative_method_name_spec.rb +0 -78
  251. data/spec/reek/smell_detectors/uncommunicative_module_name_spec.rb +0 -78
  252. data/spec/reek/smell_detectors/uncommunicative_parameter_name_spec.rb +0 -147
  253. data/spec/reek/smell_detectors/uncommunicative_variable_name_spec.rb +0 -201
  254. data/spec/reek/smell_detectors/unused_parameters_spec.rb +0 -114
  255. data/spec/reek/smell_detectors/unused_private_method_spec.rb +0 -205
  256. data/spec/reek/smell_detectors/utility_function_spec.rb +0 -293
  257. data/spec/reek/smell_warning_spec.rb +0 -137
  258. data/spec/reek/source/source_code_spec.rb +0 -79
  259. data/spec/reek/source/source_locator_spec.rb +0 -166
  260. data/spec/reek/spec/should_reek_of_spec.rb +0 -153
  261. data/spec/reek/spec/should_reek_only_of_spec.rb +0 -91
  262. data/spec/reek/spec/should_reek_spec.rb +0 -52
  263. data/spec/reek/spec/smell_matcher_spec.rb +0 -87
  264. data/spec/reek/tree_dresser_spec.rb +0 -46
  265. data/spec/spec_helper.rb +0 -110
  266. data/tasks/configuration.rake +0 -18
  267. data/tasks/console.rake +0 -5
  268. data/tasks/reek.rake +0 -6
  269. data/tasks/rubocop.rake +0 -11
  270. data/tasks/test.rake +0 -32
  271. /data/lib/reek/{report/code_climate.rb → code_climate.rb} +0 -0
@@ -1,116 +0,0 @@
1
- Feature: Well formed source comments are handled properly
2
- As a developer I want to be able to have a fine-grained control
3
- over how Reek handles smells via source code comments.
4
-
5
- Scenario: Disable smell detector implicitly
6
- Given a file named "disable_detector_implicitly.rb" with:
7
- """
8
- # Test class
9
- # :reek:TooManyInstanceVariables
10
- class Alfa
11
- def initialize
12
- @charlie = @delta = @echo = @foxtrot = @hotel = 1
13
- end
14
- end
15
- """
16
- When I run reek disable_detector_implicitly.rb
17
- Then it succeeds
18
- And it reports nothing
19
-
20
- Scenario: Disable smell detector explicitly
21
- Given a file named "disable_detector_explicitly.rb" with:
22
- """
23
- # Test class
24
- # :reek:TooManyInstanceVariables { enabled: false }
25
- class Alfa
26
- def initialize
27
- @charlie = @delta = @echo = @foxtrot = @hotel = 1
28
- end
29
- end
30
- """
31
- When I run reek disable_detector_explicitly.rb
32
- Then it succeeds
33
- And it reports nothing
34
-
35
- Scenario: Enable smell detector explicitly
36
- Given a file named "enable_detector_explicitly.rb" with:
37
- """
38
- # Test class
39
- # :reek:TooManyInstanceVariables { enabled: true }
40
- class Alfa
41
- def initialize
42
- @charlie = @delta = @echo = @foxtrot = @hotel = 1
43
- end
44
- end
45
- """
46
- When I run reek enable_detector_explicitly.rb
47
- Then the exit status indicates smells
48
- And it reports:
49
- """
50
- enable_detector_explicitly.rb -- 1 warning:
51
- [3]:TooManyInstanceVariables: Alfa has at least 5 instance variables
52
- """
53
-
54
- Scenario: Configure smell detector with the basic exclude option as string
55
- Given a file named "configure_exclude_option.rb" with:
56
- """
57
- # Test class
58
- # :reek:TooManyInstanceVariables { exclude: '@hotel' }
59
- class Alfa
60
- def initialize
61
- @charlie = @delta = @echo = @foxtrot = @hotel = 1
62
- end
63
- end
64
- """
65
- When I run reek configure_exclude_option.rb
66
- Then it succeeds
67
- And it reports nothing
68
-
69
- Scenario: Configure smell detector with the basic exclude option as regex
70
- Given a file named "configure_exclude_option.rb" with:
71
- """
72
- # Test class
73
- # :reek:TooManyInstanceVariables { exclude: /hotel/ }
74
- class Alfa
75
- def initialize
76
- @charlie = @delta = @echo = @foxtrot = @hotel = 1
77
- end
78
- end
79
- """
80
- When I run reek configure_exclude_option.rb
81
- Then it succeeds
82
- And it reports nothing
83
-
84
- Scenario: Configure smell detector with a detector specific option that silences it
85
- Given a file named "configure_detector_specific_option.rb" with:
86
- """
87
- # Test class
88
- # :reek:TooManyInstanceVariables { max_instance_variables: 5 }
89
- class Alfa
90
- def initialize
91
- @charlie = @delta = @echo = @foxtrot = @hotel = 1
92
- end
93
- end
94
- """
95
- When I run reek configure_detector_specific_option.rb
96
- Then it succeeds
97
- And it reports nothing
98
-
99
- Scenario: Configure smell detector with a detector specific option that makes it report again
100
- Given a file named "configure_detector_specific_option.rb" with:
101
- """
102
- # Test class
103
- # :reek:TooManyInstanceVariables { max_instance_variables: 2 }
104
- class Alfa
105
- def initialize
106
- @charlie = @delta = @echo = 1
107
- end
108
- end
109
- """
110
- When I run reek configure_detector_specific_option.rb
111
- Then the exit status indicates smells
112
- And it reports:
113
- """
114
- configure_detector_specific_option.rb -- 1 warning:
115
- [3]:TooManyInstanceVariables: Alfa has at least 3 instance variables
116
- """
@@ -1,32 +0,0 @@
1
- Feature: Handling different locales
2
- In order to work in a variety of environments
3
- As a developer
4
- I want Reek to work properly in any locale
5
-
6
- Scenario: Running Reek in an UTF-8 locale
7
- Given I set the environment variable "LANG" to "en_US.utf8"
8
- And a file "konnichiwa.rb" with:
9
- """
10
- puts 'こんにちは世界'
11
- """
12
- When I run reek -V konnichiwa.rb
13
- Then it succeeds
14
- And it reports no errors
15
- And it reports:
16
- """
17
- konnichiwa.rb -- 0 warnings
18
- """
19
-
20
- Scenario: Running Reek in the POSIX locale
21
- Given I set the environment variable "LANG" to "POSIX"
22
- And a file "konnichiwa.rb" with:
23
- """
24
- puts 'こんにちは世界'
25
- """
26
- When I run reek -V konnichiwa.rb
27
- Then it succeeds
28
- And it reports no errors
29
- And it reports:
30
- """
31
- konnichiwa.rb -- 0 warnings
32
- """
@@ -1,41 +0,0 @@
1
- Feature: Using Reek programmatically
2
- In order to use Reek from inside my program
3
- As a developer
4
- I want to be able to use its classes
5
-
6
- Scenario: Accessing smells found by an examiner
7
- Given the smelly file 'smelly.rb'
8
- And a file named "examine.rb" with:
9
- """
10
- require 'reek'
11
- examiner = Reek::Examiner.new(File.new('smelly.rb'))
12
- examiner.smells.each do |smell|
13
- puts smell.message
14
- end
15
- """
16
- When I run `ruby examine.rb`
17
- Then it reports no errors
18
- And it reports:
19
- """
20
- has the name 'x'
21
- has the variable name 'y'
22
- """
23
-
24
- Scenario: Using Reek's built-in report classes
25
- Given the smelly file 'smelly.rb'
26
- And a file named "examine.rb" with:
27
- """
28
- require 'reek'
29
- examiner = Reek::Examiner.new(File.new('smelly.rb'))
30
- report = Reek::Report::TextReport.new
31
- report.add_examiner examiner
32
- report.show
33
- """
34
- When I run `ruby examine.rb`
35
- Then it reports no errors
36
- And it reports:
37
- """
38
- smelly.rb -- 2 warnings:
39
- UncommunicativeMethodName: Smelly#x has the name 'x'
40
- UncommunicativeVariableName: Smelly#x has the variable name 'y'
41
- """
@@ -1,138 +0,0 @@
1
- Feature: Reek can be driven through its Task
2
- Reek provides an easy way to integrate its use into Rakefiles,
3
- via the Task class. These scenarios test its various options.
4
-
5
- Scenario: source_files points at the desired files
6
- Given the smelly file 'smelly.rb'
7
- And a file "Rakefile" with:
8
- """
9
- require 'reek/rake/task'
10
-
11
- Reek::Rake::Task.new do |t|
12
- t.source_files = 'smelly.rb'
13
- t.reek_opts = '--no-color --no-documentation'
14
- end
15
- """
16
- When I run `rake reek`
17
- Then the exit status indicates an error
18
- And it reports:
19
- """
20
- smelly.rb -- 2 warnings:
21
- [4]:UncommunicativeMethodName: Smelly#x has the name 'x'
22
- [5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
23
- """
24
-
25
- Scenario: source_files using a FileList instead of a String
26
- Given the smelly file 'smelly.rb'
27
- And a file "Rakefile" with:
28
- """
29
- require 'reek/rake/task'
30
-
31
- Reek::Rake::Task.new do |t|
32
- t.source_files = FileList['smelly.*']
33
- t.reek_opts = '--no-color --no-documentation'
34
- end
35
- """
36
- When I run `rake reek`
37
- Then the exit status indicates an error
38
- And it reports:
39
- """
40
- smelly.rb -- 2 warnings:
41
- [4]:UncommunicativeMethodName: Smelly#x has the name 'x'
42
- [5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
43
- """
44
-
45
- Scenario: name changes the task name
46
- Given the smelly file 'smelly.rb'
47
- And a file "Rakefile" with:
48
- """
49
- require 'reek/rake/task'
50
-
51
- Reek::Rake::Task.new('silky') do |t|
52
- t.source_files = 'smelly.rb'
53
- t.reek_opts = '--no-color --no-documentation'
54
- end
55
- """
56
- When I run `rake silky`
57
- Then the exit status indicates an error
58
- And it reports:
59
- """
60
- smelly.rb -- 2 warnings:
61
- [4]:UncommunicativeMethodName: Smelly#x has the name 'x'
62
- [5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
63
- """
64
-
65
- Scenario: verbose prints the reek command
66
- Given the smelly file 'smelly.rb'
67
- And a file "Rakefile" with:
68
- """
69
- require 'reek/rake/task'
70
-
71
- Reek::Rake::Task.new do |t|
72
- t.source_files = 'smelly.rb'
73
- t.verbose = true
74
- end
75
- """
76
- When I run `rake reek`
77
- Then the exit status indicates an error
78
- And stdout includes "Running 'reek' rake command"
79
-
80
- Scenario: fail_on_error can hide the error status
81
- Given the smelly file 'smelly.rb'
82
- And a file "Rakefile" with:
83
- """
84
- require 'reek/rake/task'
85
-
86
- Reek::Rake::Task.new do |t|
87
- t.fail_on_error = false
88
- t.source_files = 'smelly.rb'
89
- t.reek_opts = '--no-color --no-documentation'
90
- end
91
- """
92
- When I run `rake reek`
93
- Then it reports no errors
94
- And it succeeds
95
- And it reports:
96
- """
97
- smelly.rb -- 2 warnings:
98
- [4]:UncommunicativeMethodName: Smelly#x has the name 'x'
99
- [5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
100
- """
101
-
102
- Scenario: can be configured with config_file
103
- Given the smelly file 'smelly.rb'
104
- And a configuration file 'full_mask.reek'
105
- And a file "Rakefile" with:
106
- """
107
- require 'reek/rake/task'
108
-
109
- Reek::Rake::Task.new do |t|
110
- t.config_file = 'full_mask.reek'
111
- t.source_files = 'smelly.rb'
112
- end
113
- """
114
- When I run `rake reek`
115
- Then it succeeds
116
- And it reports nothing
117
-
118
- Scenario: REEK_SRC overrides the files to check
119
- Given the smelly file 'smelly.rb'
120
- And the clean file "clean.rb"
121
- And a file "Rakefile" with:
122
- """
123
- require 'reek/rake/task'
124
-
125
- Reek::Rake::Task.new do |t|
126
- t.source_files = 'clean.rb'
127
- t.reek_opts = '--no-color --no-documentation'
128
- end
129
- """
130
- When I set the environment variable "REEK_SRC" to "smelly.rb"
131
- And I run `rake reek`
132
- Then the exit status indicates an error
133
- And it reports:
134
- """
135
- smelly.rb -- 2 warnings:
136
- [4]:UncommunicativeMethodName: Smelly#x has the name 'x'
137
- [5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
138
- """
@@ -1,59 +0,0 @@
1
- Feature: Report smells using Code Climate format
2
- In order to run as an Engine on Code Climate, output format following their
3
- spec.
4
-
5
- Scenario: output is empty when there are no smells
6
- Given a directory called 'clean' containing two clean files
7
- When I run the code climate reek runner
8
- Then it succeeds
9
- And it reports this Code Climate output:
10
- """
11
- """
12
-
13
- Scenario: Indicate smells and print them as JSON when using files
14
- Given the smelly file 'smelly.rb'
15
- When I run the code climate reek runner
16
- Then it reports this Code Climate output:
17
- """
18
- {
19
- "type": "issue",
20
- "check_name": "UncommunicativeMethodName",
21
- "description": "Smelly#x has the name 'x'",
22
- "categories": [
23
- "Complexity"
24
- ],
25
- "location": {
26
- "path": "smelly.rb",
27
- "lines": {
28
- "begin": 4,
29
- "end": 4
30
- }
31
- },
32
- "remediation_points": 150000,
33
- "content": {
34
- "body": "An `Uncommunicative Method Name` is a method name that doesn't communicate its intent well enough.\n\nPoor names make it hard for the reader to build a mental picture of what's going on in the code. They can also be mis-interpreted; and they hurt the flow of reading, because the reader must slow down to interpret the names.\n"
35
- },
36
- "fingerprint": "2b41a3a4bb7de31ac4f5944bf68b7f5f"
37
- }
38
- NULL_BYTE_CHARACTER
39
- {
40
- "type": "issue",
41
- "check_name": "UncommunicativeVariableName",
42
- "description": "Smelly#x has the variable name 'y'",
43
- "categories": [
44
- "Complexity"
45
- ],
46
- "location": {
47
- "path": "smelly.rb",
48
- "lines": {
49
- "begin": 5,
50
- "end": 5
51
- }
52
- },
53
- "remediation_points": 150000,
54
- "content": {
55
- "body": "An `Uncommunicative Variable Name` is a variable name that doesn't communicate its intent well enough.\n\nPoor names make it hard for the reader to build a mental picture of what's going on in the code. They can also be mis-interpreted; and they hurt the flow of reading, because the reader must slow down to interpret the names.\n"
56
- },
57
- "fingerprint": "72f0dc8f8da5f9d7b8b29318636e5609"
58
- }
59
- """
@@ -1,59 +0,0 @@
1
- Feature: Report smells using simple JSON layout
2
- In order to parse Reek's output simply and consistently, simply
3
- output a list of smells in JSON.
4
-
5
- Scenario: output is empty when there are no smells
6
- Given a directory called 'clean' containing two clean files
7
- When I run reek --format json clean
8
- Then it succeeds
9
- And it reports this JSON:
10
- """
11
- []
12
- """
13
-
14
- Scenario: Indicate smells and print them as JSON when using files
15
- Given the smelly file 'smelly.rb'
16
- When I run reek --format json smelly.rb
17
- Then the exit status indicates smells
18
- And it reports this JSON:
19
- """
20
- [
21
- {
22
- "smell_type": "UncommunicativeMethodName",
23
- "source": "smelly.rb",
24
- "context": "Smelly#x",
25
- "lines": [ 4 ],
26
- "message": "has the name 'x'",
27
- "documentation_link": "https://github.com/troessner/reek/blob/v6.0.2/docs/Uncommunicative-Method-Name.md",
28
- "name": "x"
29
- },
30
- {
31
- "smell_type": "UncommunicativeVariableName",
32
- "source": "smelly.rb",
33
- "context": "Smelly#x",
34
- "lines": [ 5 ],
35
- "message": "has the variable name 'y'",
36
- "documentation_link": "https://github.com/troessner/reek/blob/v6.0.2/docs/Uncommunicative-Variable-Name.md",
37
- "name": "y"
38
- }
39
- ]
40
- """
41
-
42
- Scenario: Indicate smells and print them as JSON when using STDIN
43
- When I pass "class Turn; end" to reek --format json
44
- Then the exit status indicates smells
45
- And it reports this JSON:
46
- """
47
- [
48
- {
49
- "smell_type": "IrresponsibleModule",
50
- "source": "STDIN",
51
- "context": "Turn",
52
- "lines": [
53
- 1
54
- ],
55
- "message": "has no descriptive comment",
56
- "documentation_link": "https://github.com/troessner/reek/blob/v6.0.2/docs/Irresponsible-Module.md"
57
- }
58
- ]
59
- """
@@ -1,219 +0,0 @@
1
- Feature: Correctly formatted reports
2
- In order to get the most out of Reek
3
- As a developer
4
- I want to be able to parse Reek's output simply and consistently
5
-
6
- Scenario Outline: two reports run together with indented smells
7
- Given a directory called 'smelly' containing two smelly files
8
- When I run reek <args>
9
- Then the exit status indicates smells
10
- And it reports:
11
- """
12
- smelly/dirty_one.rb -- 2 warnings:
13
- [4]:UncommunicativeMethodName: Smelly#x has the name 'x'
14
- [5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
15
- smelly/dirty_two.rb -- 2 warnings:
16
- [4]:UncommunicativeMethodName: Smelly#x has the name 'x'
17
- [5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
18
- 4 total warnings
19
- """
20
-
21
- Examples:
22
- | args |
23
- | smelly/dirty_one.rb smelly/dirty_two.rb |
24
- | smelly |
25
-
26
- Scenario Outline: No sorting (which means report each file as it is read in)
27
- Given a directory called 'smelly' containing two smelly files
28
- When I run reek <option> smelly
29
- Then the exit status indicates smells
30
- And it reports:
31
- """
32
- smelly/dirty_one.rb -- 2 warnings:
33
- [4]:UncommunicativeMethodName: Smelly#x has the name 'x'
34
- [5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
35
- smelly/dirty_two.rb -- 2 warnings:
36
- [4]:UncommunicativeMethodName: Smelly#x has the name 'x'
37
- [5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
38
- 4 total warnings
39
- """
40
-
41
- Examples:
42
- | option |
43
- | |
44
- | --sort-by none |
45
- | --sort-by n |
46
-
47
- Scenario Outline: Sort by issue count
48
- Given a directory called 'smelly' containing two smelly files
49
- When I run reek <option> smelly
50
- Then the exit status indicates smells
51
- And it reports:
52
- """
53
- smelly/dirty_two.rb -- 2 warnings:
54
- [4]:UncommunicativeMethodName: Smelly#x has the name 'x'
55
- [5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
56
- smelly/dirty_one.rb -- 2 warnings:
57
- [4]:UncommunicativeMethodName: Smelly#x has the name 'x'
58
- [5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
59
- 4 total warnings
60
- """
61
-
62
- Examples:
63
- | option |
64
- | --sort-by smelliness |
65
- | --sort-by s |
66
-
67
- Scenario: good files show no headings by default
68
- Given a directory called 'clean' containing two clean files
69
- When I run reek clean
70
- Then it succeeds
71
- And it reports:
72
- """
73
- 0 total warnings
74
- """
75
-
76
- Scenario Outline: --empty-headings turns on headings for fragrant files
77
- Given a directory called 'clean' containing two clean files
78
- When I run reek <option> clean
79
- Then it succeeds
80
- And it reports:
81
- """
82
- clean/clean_one.rb -- 0 warnings
83
- clean/clean_two.rb -- 0 warnings
84
- 0 total warnings
85
- """
86
-
87
- Examples:
88
- | option |
89
- | --empty-headings |
90
- | -V |
91
-
92
- Scenario Outline: --no-empty-headings turns off headings for fragrant files
93
- Given a directory called 'clean' containing two clean files
94
- When I run reek <option> clean
95
- Then it succeeds
96
- And it reports:
97
- """
98
- 0 total warnings
99
- """
100
-
101
- Examples:
102
- | option |
103
- | --no-empty-headings |
104
- | -V --no-empty-headings |
105
-
106
- Scenario Outline: --no-line-numbers turns off line numbers
107
- Given the smelly file 'smelly.rb'
108
- When I run reek <option> smelly.rb
109
- Then the exit status indicates smells
110
- And it reports:
111
- """
112
- smelly.rb -- 2 warnings:
113
- UncommunicativeMethodName: Smelly#x has the name 'x'
114
- UncommunicativeVariableName: Smelly#x has the variable name 'y'
115
- """
116
-
117
- Examples:
118
- | option |
119
- | --no-line-numbers |
120
- | --no-line-numbers -V |
121
- | -V --no-line-numbers |
122
-
123
- Scenario Outline: --line-numbers turns on line numbers
124
- Given the smelly file 'smelly.rb'
125
- When I run reek <option> smelly.rb
126
- Then the exit status indicates smells
127
- And it reports:
128
- """
129
- smelly.rb -- 2 warnings:
130
- [4]:UncommunicativeMethodName: Smelly#x has the name 'x'
131
- [5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
132
- """
133
-
134
- Examples:
135
- | option |
136
- | --line-numbers |
137
- | --no-line-numbers --line-numbers |
138
- | --no-line-numbers -n |
139
-
140
- Scenario Outline: --single-line shows filename and one line number
141
- Given the smelly file 'smelly.rb'
142
- When I run reek <option> smelly.rb
143
- Then the exit status indicates smells
144
- And it reports:
145
- """
146
- smelly.rb -- 2 warnings:
147
- smelly.rb:4: UncommunicativeMethodName: Smelly#x has the name 'x'
148
- smelly.rb:5: UncommunicativeVariableName: Smelly#x has the variable name 'y'
149
- """
150
-
151
- Examples:
152
- | option |
153
- | -s |
154
- | --single-line |
155
- | -s -V |
156
- | -V -s |
157
-
158
- Scenario Outline: Extra slashes aren't added to directory names
159
- Given a directory called 'smelly' containing two smelly files
160
- When I run reek <args>
161
- Then the exit status indicates smells
162
- And it reports:
163
- """
164
- smelly/dirty_one.rb -- 2 warnings:
165
- [4]:UncommunicativeMethodName: Smelly#x has the name 'x'
166
- [5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
167
- smelly/dirty_two.rb -- 2 warnings:
168
- [4]:UncommunicativeMethodName: Smelly#x has the name 'x'
169
- [5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
170
- 4 total warnings
171
- """
172
-
173
- Examples:
174
- | args |
175
- | smelly/ |
176
- | smelly |
177
-
178
- Scenario Outline: -U or --documentation adds helpful links to smell warnings
179
- Given the smelly file 'smelly.rb'
180
- When I run reek <option> smelly.rb
181
- Then the exit status indicates smells
182
- And it reports:
183
- """
184
- smelly.rb -- 2 warnings:
185
- [4]:UncommunicativeMethodName: Smelly#x has the name 'x' [https://github.com/troessner/reek/blob/v6.0.2/docs/Uncommunicative-Method-Name.md]
186
- [5]:UncommunicativeVariableName: Smelly#x has the variable name 'y' [https://github.com/troessner/reek/blob/v6.0.2/docs/Uncommunicative-Variable-Name.md]
187
- """
188
-
189
- Examples:
190
- | option |
191
- | -U |
192
- | --documentation |
193
-
194
- Scenario: --no-documentation drops links from smell warnings
195
- Given the smelly file 'smelly.rb'
196
- When I run reek --no-documentation smelly.rb
197
- Then the exit status indicates smells
198
- And it reports:
199
- """
200
- smelly.rb -- 2 warnings:
201
- [4]:UncommunicativeMethodName: Smelly#x has the name 'x'
202
- [5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
203
- """
204
-
205
- Scenario Outline: --documentation is independent of --line-numbers
206
- Given the smelly file 'smelly.rb'
207
- When I run reek <option> smelly.rb
208
- Then the exit status indicates smells
209
- And it reports:
210
- """
211
- smelly.rb -- 2 warnings:
212
- UncommunicativeMethodName: Smelly#x has the name 'x' [https://github.com/troessner/reek/blob/v6.0.2/docs/Uncommunicative-Method-Name.md]
213
- UncommunicativeVariableName: Smelly#x has the variable name 'y' [https://github.com/troessner/reek/blob/v6.0.2/docs/Uncommunicative-Variable-Name.md]
214
- """
215
-
216
- Examples:
217
- | option |
218
- | --no-line-numbers -U |
219
- | --no-line-numbers --documentation |