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,3 +0,0 @@
1
- <div class="note public">
2
- <div class="inline"><p>This <%= object.type %> is part of Reek's public API.</p></div>
3
- </div>
@@ -1,35 +0,0 @@
1
- def init
2
- super
3
- return unless show_api_marker_section?
4
-
5
- if sections.first
6
- sections.first.place(:api_marker).before(:private)
7
- else
8
- sections :index, [:api_marker]
9
- end
10
- end
11
-
12
- def api_marker
13
- return if object.type == :root
14
-
15
- erb(:private) unless ['public', 'private'].include? api_text
16
- end
17
-
18
- private
19
-
20
- def api_text
21
- api_text = object.has_tag?(:api) && object.tag(:api).text
22
- api_text = 'public' if object.has_tag?(:public)
23
- api_text
24
- end
25
-
26
- def show_api_marker_section?
27
- return false if object.type == :root
28
-
29
- case api_text
30
- when 'public', 'private'
31
- false
32
- else
33
- true
34
- end
35
- end
@@ -1 +0,0 @@
1
- .note.public { background: #c5ffc5; border-color: #aaecaa; }
data/docs/yard_plugin.rb DELETED
@@ -1,17 +0,0 @@
1
- require 'yard'
2
-
3
- # Template helper to modify processing of links in HTML generated from our
4
- # markdown files.
5
- module LocalLinkHelper
6
- # Rewrites links to (assumed local) markdown files so they're processed as
7
- # {file: } directives.
8
- def resolve_links(text)
9
- text = text.gsub(%r{<a href="([^"]*.md)">([^<]*)</a>}, '{file:\1 \2}')
10
- super text
11
- end
12
- end
13
-
14
- YARD::Templates::Template.extra_includes << LocalLinkHelper
15
- YARD::Tags::Library.define_tag('Guaranteed public API', :public)
16
- YARD::Tags::Library.define_tag('Code quality configuration', :quality)
17
- YARD::Templates::Engine.register_template_path File.join(File.dirname(__FILE__), 'templates')
@@ -1,15 +0,0 @@
1
- Feature: The Reek CLI maintains backwards compatibility
2
- In order to use Reek without fuss
3
- As a developer
4
- I want to have a stable basic command line interface
5
-
6
- Scenario: the example from README reports as expected
7
- Given the smelly file 'smelly.rb'
8
- When I run reek smelly.rb
9
- Then the exit status indicates smells
10
- And it reports:
11
- """
12
- smelly.rb -- 2 warnings:
13
- [4]:UncommunicativeMethodName: Smelly#x has the name 'x'
14
- [5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
15
- """
@@ -1,123 +0,0 @@
1
- Feature: Reek can be controlled using command-line options
2
- In order to change Reek's default behaviour
3
- As a developer
4
- I want to supply options on the command line
5
-
6
- Scenario: return non-zero status on bad option
7
- When I run reek --no-such-option
8
- Then the exit status indicates an error
9
- And it reports the error "Error: invalid option: --no-such-option"
10
- And there is no output on stdout
11
-
12
- Scenario: display the current version number
13
- When I run reek --version
14
- Then it succeeds
15
- And it reports the current version
16
-
17
- Scenario: return given status code when using --failure-exit-code
18
- Given the smelly file 'smelly.rb'
19
- When I run reek smelly.rb --failure-exit-code 23
20
- Then the exit status is 23
21
-
22
- Scenario: return given status code when using --success-exit-code
23
- Given the clean file "clean.rb"
24
- When I run reek clean.rb --success-exit-code 42
25
- Then the exit status is 42
26
-
27
- Scenario: display the help information
28
- When I run reek --help
29
- Then it succeeds
30
- And it reports:
31
- """
32
- Usage: reek [options] [files]
33
-
34
- Examples:
35
-
36
- reek lib/*.rb
37
- reek -s lib
38
- cat my_class.rb | reek
39
-
40
- See https://github.com/troessner/reek for detailed help.
41
-
42
- Configuration:
43
- -c, --config FILE Read configuration options from FILE
44
- --smell SMELL Only look for a specific smell.
45
- Call it like this: reek --smell MissingSafeMethod source.rb
46
- Check out https://github.com/troessner/reek/blob/v6.0.3/docs/Code-Smells.md for a list of smells
47
- --stdin-filename FILE When passing code in via pipe, assume this filename when checking file or directory rules in the config.
48
-
49
- Generate a todo list:
50
- -t, --todo Generate a todo list
51
-
52
- Report format:
53
- -f, --format FORMAT Report smells in the given format:
54
- html
55
- text (default)
56
- yaml
57
- json
58
- xml
59
-
60
- Text format options:
61
- --[no-]color Use colors for the output (default: true)
62
- -V, --[no-]empty-headings Show headings for smell-free source files (default: false)
63
- -U, --[no-]documentation Show link to related documentation page for each smell (default: true)
64
- --[no-]show-configuration-path
65
- Show which configuration file Reek is using (default: false)
66
- -n, --[no-]line-numbers Show line numbers in the output (default: true)
67
- -s, --single-line Show location in editor-compatible single-line-per-smell format
68
- -P, --[no-]progress Show progress of each source as it is examined (default: true)
69
- --sort-by SORTING Sort reported files by the given criterium:
70
- smelliness ("smelliest" files first)
71
- none (default - output in processing order)
72
- --force-exclusion Force excluding files specified in the configuration `exclude_paths`
73
- even if they are explicitly passed as arguments
74
-
75
- Exit codes:
76
- --success-exit-code CODE The exit code when no smells are found (default: 0)
77
- --failure-exit-code CODE The exit code when smells are found (default: 2)
78
-
79
- Utility options:
80
- -h, --help Show this message
81
- -l, --list List all available smell detectors
82
- -v, --version Show version
83
- """
84
-
85
- Scenario: List all available smell detectors
86
- When I run reek --list
87
- Then it succeeds
88
- And it reports:
89
- """
90
- All available smell detectors:
91
-
92
- Attribute
93
- BooleanParameter
94
- ClassVariable
95
- ControlParameter
96
- DataClump
97
- DuplicateMethodCall
98
- FeatureEnvy
99
- InstanceVariableAssumption
100
- IrresponsibleModule
101
- LongParameterList
102
- LongYieldList
103
- ManualDispatch
104
- MissingSafeMethod
105
- ModuleInitialize
106
- NestedIterators
107
- NilCheck
108
- RepeatedConditional
109
- SubclassedFromCoreClass
110
- TooManyConstants
111
- TooManyInstanceVariables
112
- TooManyMethods
113
- TooManyStatements
114
- UncommunicativeMethodName
115
- UncommunicativeModuleName
116
- UncommunicativeParameterName
117
- UncommunicativeVariableName
118
- UnusedParameters
119
- UnusedPrivateMethod
120
- UtilityFunction
121
-
122
- Check out https://github.com/troessner/reek/blob/v6.0.3/docs/Code-Smells.md for a details on each detector
123
- """
@@ -1,33 +0,0 @@
1
- Feature: Show progress
2
- In order to see the progress of the examiners
3
- As a developer
4
- I want to be able to selectively activate progress reporting
5
-
6
- # Note that --progress is the default on TTYs, but needs to be explicitely
7
- # enabled here because output in the cucumber scenarios does not go to a TTY.
8
- Scenario: shows progress output on mixed files by default
9
- Given a directory called 'mixed_files' containing some clean and smelly files
10
- When I run reek --progress mixed_files
11
- Then the exit status indicates smells
12
- And it reports:
13
- """
14
- Inspecting 2 file(s):
15
- .S
16
-
17
- mixed_files/dirty.rb -- 2 warnings:
18
- [4]:UncommunicativeMethodName: Smelly#x has the name 'x'
19
- [5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
20
- 2 total warnings
21
- """
22
-
23
- Scenario: --no-progress disables progress output
24
- Given a directory called 'mixed_files' containing some clean and smelly files
25
- When I run reek --no-progress mixed_files
26
- Then the exit status indicates smells
27
- And it reports:
28
- """
29
- mixed_files/dirty.rb -- 2 warnings:
30
- [4]:UncommunicativeMethodName: Smelly#x has the name 'x'
31
- [5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
32
- 2 total warnings
33
- """
@@ -1,15 +0,0 @@
1
- Feature: Smell selection
2
- In order to focus on particular code smells
3
- As a developer
4
- I want to be able to selectively activate smell detectors
5
-
6
- Scenario: --smell selects a smell to detect
7
- Given the smelly file 'smelly.rb'
8
- And a configuration file 'partial_mask.reek'
9
- When I run reek --no-line-numbers --smell UncommunicativeVariableName smelly.rb
10
- Then the exit status indicates smells
11
- And it reports:
12
- """
13
- smelly.rb -- 1 warning:
14
- UncommunicativeVariableName: Smelly#x has the variable name 'y'
15
- """
@@ -1,38 +0,0 @@
1
- Feature: Reports total number of code smells
2
- In order to monitor the total number of smells
3
- Reek outputs the total number of smells among all files inspected.
4
-
5
- Scenario: Does not output total number of smells when inspecting single file
6
- Given the smelly file 'smelly.rb'
7
- When I run reek smelly.rb
8
- Then the exit status indicates smells
9
- And it reports:
10
- """
11
- smelly.rb -- 2 warnings:
12
- [4]:UncommunicativeMethodName: Smelly#x has the name 'x'
13
- [5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
14
- """
15
-
16
- Scenario: Output total number of smells when inspecting multiple files
17
- Given a directory called 'smelly' containing two smelly files
18
- When I run reek smelly
19
- Then the exit status indicates smells
20
- And it reports:
21
- """
22
- smelly/dirty_one.rb -- 2 warnings:
23
- [4]:UncommunicativeMethodName: Smelly#x has the name 'x'
24
- [5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
25
- smelly/dirty_two.rb -- 2 warnings:
26
- [4]:UncommunicativeMethodName: Smelly#x has the name 'x'
27
- [5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
28
- 4 total warnings
29
- """
30
-
31
- Scenario: Output total number of smells even if total equals 0
32
- Given a directory called 'clean' containing two clean files
33
- When I run reek clean
34
- Then it succeeds
35
- And it reports:
36
- """
37
- 0 total warnings
38
- """
@@ -1,65 +0,0 @@
1
- Feature: Reek reads from $stdin when no files are given
2
- In order to use reek with pipelines
3
- As a developer
4
- I want to pipe source code on stdin
5
-
6
- Scenario: return zero status with no smells
7
- When I pass "def simple() @fred = 3 end" to reek
8
- Then it succeeds
9
- And it reports nothing
10
-
11
- Scenario: outputs nothing on empty stdin
12
- When I pass "" to reek
13
- Then it succeeds
14
- And it reports nothing
15
-
16
- Scenario: outputs header only on empty stdin in verbose mode
17
- When I pass "" to reek -V
18
- Then it succeeds
19
- And it reports:
20
- """
21
- STDIN -- 0 warnings
22
- """
23
-
24
- Scenario: return non-zero status when there are smells
25
- When I pass "class Turn; def y() @x = 3; end end" to reek
26
- Then the exit status indicates smells
27
- And it reports:
28
- """
29
- STDIN -- 3 warnings:
30
- [1]:IrresponsibleModule: Turn has no descriptive comment
31
- [1]:UncommunicativeMethodName: Turn#y has the name 'y'
32
- [1]:UncommunicativeVariableName: Turn has the variable name '@x'
33
- """
34
-
35
- Scenario: syntax error causes the source to be ignored
36
- When I pass "= invalid syntax =" to reek
37
- Then it succeeds
38
- And it reports the error "Parser::SyntaxError: unexpected token tEQL"
39
-
40
- Scenario: providing a filename to use for the config to match against
41
- Given a file named "web_app/config.reek" with:
42
- """
43
- ---
44
- directories:
45
- "web_app/app/controllers":
46
- IrresponsibleModule:
47
- enabled: false
48
- NestedIterators:
49
- enabled: false
50
- InstanceVariableAssumption:
51
- enabled: false
52
- """
53
- When I pass a stdin to reek --config web_app/config.reek --stdin-filename web_app/app/controllers/users_controller with:
54
- """
55
- class UsersController < ApplicationController
56
- def show
57
- respond_with do |format|
58
- format.json { |json| @user.to_custom_json }
59
- format.xml { |xml| @user.to_fancy_xml }
60
- end
61
- end
62
- end
63
- """
64
- Then it succeeds
65
- And it reports nothing
@@ -1,87 +0,0 @@
1
- Feature: `accept` 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 accept specific patterns and names to exclude them from reporting
5
-
6
- Scenario: Accept names
7
- Given a file named "config.reek" with:
8
- """
9
- ---
10
- detectors:
11
- UncommunicativeMethodName:
12
- accept:
13
- - m1
14
- - m2
15
- UncommunicativeParameterName:
16
- accept:
17
- - a1
18
- - a2
19
- UncommunicativeModuleName:
20
- accept:
21
- - C1
22
- UncommunicativeVariableName:
23
- accept:
24
- - var1
25
- """
26
- And a file named "smelly.rb" with:
27
- """
28
- # Should not report UncommunicativeModuleName
29
- class C1
30
- # Should not report UncommunicativeMethodName and UncommunicativeParameterName
31
- def m1(a1); a1; end
32
- # Should not report UncommunicativeMethodName and UncommunicativeParameterName
33
- def m2(a2); a2; end
34
- # Should report UncommunicativeMethodName and UncommunicativeParameterName
35
- def m3(a3); a3; end
36
- var1 = 2 # Should not report UncommunicativeVariableName
37
- myvar1 = 2 # Should not report UncommunicativeVariableName
38
- var2 = 2 # Should report UncommunicativeVariableName
39
- end
40
- """
41
- When I run reek -c config.reek smelly.rb
42
- Then it reports:
43
- """
44
- smelly.rb -- 3 warnings:
45
- [8]:UncommunicativeMethodName: C1#m3 has the name 'm3'
46
- [8]:UncommunicativeParameterName: C1#m3 has the parameter name 'a3'
47
- [11]:UncommunicativeVariableName: C1 has the variable name 'var2'
48
- """
49
-
50
- Scenario: Accept regexes
51
- Given a file named "config.reek" with:
52
- """
53
- ---
54
- detectors:
55
- UncommunicativeMethodName:
56
- accept:
57
- - /oobar/
58
- UncommunicativeParameterName:
59
- accept:
60
- - /ola/
61
- UncommunicativeModuleName:
62
- accept:
63
- - /lassy/
64
- UncommunicativeVariableName:
65
- accept:
66
- - /^var1/
67
- """
68
- And a file named "smelly.rb" with:
69
- """
70
- # Should not report UncommunicativeModuleName
71
- class Classy1
72
- # Should not report UncommunicativeMethodName and UncommunicativeParameterName
73
- def foobar1(hola1); hola1; end
74
- # Should report UncommunicativeMethodName and UncommunicativeParameterName
75
- def m2(a2); a2; end
76
- var1 = 2 # Should not report UncommunicativeVariableName
77
- myvar1 = 2 # Should report UncommunicativeVariableName
78
- end
79
- """
80
- When I run reek -c config.reek smelly.rb
81
- Then it reports:
82
- """
83
- smelly.rb -- 3 warnings:
84
- [6]:UncommunicativeMethodName: Classy1#m2 has the name 'm2'
85
- [6]:UncommunicativeParameterName: Classy1#m2 has the parameter name 'a2'
86
- [8]:UncommunicativeVariableName: Classy1 has the variable name 'myvar1'
87
- """