reek 4.7.3 → 5.0.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 (248) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +17 -12
  3. data/.rubocop.yml +18 -3
  4. data/.simplecov +1 -0
  5. data/.travis.yml +3 -4
  6. data/.yardopts +1 -1
  7. data/CHANGELOG.md +45 -0
  8. data/Gemfile +4 -4
  9. data/README.md +134 -104
  10. data/Rakefile +16 -3
  11. data/bin/reek +1 -3
  12. data/docs/API.md +2 -9
  13. data/docs/Basic-Smell-Options.md +51 -11
  14. data/docs/Code-Smells.md +1 -1
  15. data/docs/Command-Line-Options.md +14 -4
  16. data/docs/Duplicate-Method-Call.md +49 -1
  17. data/docs/Feature-Envy.md +44 -0
  18. data/docs/How-To-Write-New-Detectors.md +2 -3
  19. data/docs/Instance-Variable-Assumption.md +1 -1
  20. data/docs/{Prima-Donna-Method.md → Missing-Safe-Method.md} +11 -9
  21. data/docs/Rake-Task.md +1 -1
  22. data/docs/Reek-4-to-Reek-5-migration.md +193 -0
  23. data/docs/Reek-Driven-Development.md +1 -1
  24. data/docs/Uncommunicative-Method-Name.md +45 -6
  25. data/docs/Uncommunicative-Module-Name.md +49 -7
  26. data/docs/Uncommunicative-Parameter-Name.md +43 -5
  27. data/docs/Uncommunicative-Variable-Name.md +73 -2
  28. data/docs/Unused-Private-Method.md +2 -2
  29. data/docs/defaults.reek.yml +129 -0
  30. data/docs/yard_plugin.rb +1 -0
  31. data/features/command_line_interface/basic_usage.feature +2 -2
  32. data/features/command_line_interface/options.feature +46 -4
  33. data/features/command_line_interface/show_progress.feature +4 -4
  34. data/features/command_line_interface/smell_selection.feature +1 -1
  35. data/features/command_line_interface/smells_count.feature +6 -6
  36. data/features/command_line_interface/stdin.feature +30 -8
  37. data/features/configuration_files/accept_setting.feature +45 -28
  38. data/features/configuration_files/directory_specific_directives.feature +78 -73
  39. data/features/configuration_files/exclude_directives.feature +11 -10
  40. data/features/configuration_files/exclude_paths_directives.feature +4 -4
  41. data/features/configuration_files/masking_smells.feature +38 -9
  42. data/features/configuration_files/mix_accept_reject_setting.feature +31 -28
  43. data/features/configuration_files/reject_setting.feature +52 -41
  44. data/features/configuration_files/schema_validation.feature +59 -0
  45. data/features/configuration_files/unused_private_method.feature +18 -16
  46. data/features/configuration_loading.feature +53 -10
  47. data/features/configuration_via_source_comments/erroneous_source_comments.feature +2 -2
  48. data/features/configuration_via_source_comments/well_formed_source_comments.feature +2 -2
  49. data/features/locales.feature +2 -2
  50. data/features/rake_task/rake_task.feature +15 -15
  51. data/features/reports/json.feature +3 -3
  52. data/features/reports/reports.feature +34 -34
  53. data/features/reports/yaml.feature +3 -3
  54. data/features/rspec_matcher.feature +9 -1
  55. data/features/samples.feature +287 -287
  56. data/features/step_definitions/reek_steps.rb +4 -0
  57. data/features/step_definitions/sample_file_steps.rb +9 -4
  58. data/features/support/env.rb +2 -2
  59. data/features/todo_list.feature +26 -23
  60. data/lib/reek/ast/node.rb +40 -55
  61. data/lib/reek/ast/object_refs.rb +1 -1
  62. data/lib/reek/ast/reference_collector.rb +2 -4
  63. data/lib/reek/ast/sexp_extensions/case.rb +1 -1
  64. data/lib/reek/ast/sexp_extensions/if.rb +8 -1
  65. data/lib/reek/ast/sexp_extensions/logical_operators.rb +1 -1
  66. data/lib/reek/ast/sexp_extensions/methods.rb +4 -6
  67. data/lib/reek/cli/application.rb +4 -3
  68. data/lib/reek/cli/command/report_command.rb +1 -2
  69. data/lib/reek/cli/command/todo_list_command.rb +8 -8
  70. data/lib/reek/cli/options.rb +29 -14
  71. data/lib/reek/cli/silencer.rb +14 -3
  72. data/lib/reek/code_comment.rb +14 -16
  73. data/lib/reek/configuration/app_configuration.rb +32 -28
  74. data/lib/reek/configuration/configuration_converter.rb +110 -0
  75. data/lib/reek/configuration/configuration_file_finder.rb +15 -40
  76. data/lib/reek/configuration/configuration_validator.rb +12 -23
  77. data/lib/reek/configuration/default_directive.rb +17 -3
  78. data/lib/reek/configuration/directory_directives.rb +17 -11
  79. data/lib/reek/configuration/excluded_paths.rb +1 -1
  80. data/lib/reek/configuration/rake_task_converter.rb +29 -0
  81. data/lib/reek/configuration/schema.yml +210 -0
  82. data/lib/reek/configuration/schema_validator.rb +38 -0
  83. data/lib/reek/context/attribute_context.rb +1 -1
  84. data/lib/reek/context/code_context.rb +8 -11
  85. data/lib/reek/context/method_context.rb +7 -12
  86. data/lib/reek/context/module_context.rb +4 -4
  87. data/lib/reek/context_builder.rb +11 -11
  88. data/lib/reek/detector_repository.rb +6 -0
  89. data/lib/reek/documentation_link.rb +28 -0
  90. data/lib/reek/errors/bad_detector_configuration_key_in_comment_error.rb +13 -12
  91. data/lib/reek/errors/bad_detector_in_comment_error.rb +11 -10
  92. data/lib/reek/errors/base_error.rb +3 -0
  93. data/lib/reek/errors/config_file_error.rb +11 -0
  94. data/lib/reek/errors/encoding_error.rb +16 -11
  95. data/lib/reek/errors/garbage_detector_configuration_in_comment_error.rb +11 -10
  96. data/lib/reek/errors/incomprehensible_source_error.rb +20 -22
  97. data/lib/reek/errors/syntax_error.rb +41 -0
  98. data/lib/reek/examiner.rb +19 -25
  99. data/lib/reek/logging_error_handler.rb +7 -5
  100. data/lib/reek/rake/task.rb +3 -3
  101. data/lib/reek/report/base_report.rb +8 -12
  102. data/lib/reek/report/code_climate/code_climate_configuration.rb +1 -1
  103. data/lib/reek/report/code_climate/code_climate_configuration.yml +6 -10
  104. data/lib/reek/report/documentation_link_warning_formatter.rb +17 -0
  105. data/lib/reek/report/heading_formatter.rb +54 -0
  106. data/lib/reek/report/json_report.rb +1 -1
  107. data/lib/reek/report/location_formatter.rb +40 -0
  108. data/lib/reek/report/progress_formatter.rb +79 -0
  109. data/lib/reek/report/simple_warning_formatter.rb +34 -0
  110. data/lib/reek/report/text_report.rb +1 -2
  111. data/lib/reek/report/xml_report.rb +3 -3
  112. data/lib/reek/report/yaml_report.rb +1 -1
  113. data/lib/reek/report.rb +15 -10
  114. data/lib/reek/smell_configuration.rb +2 -2
  115. data/lib/reek/smell_detectors/attribute.rb +0 -1
  116. data/lib/reek/smell_detectors/base_detector.rb +9 -12
  117. data/lib/reek/smell_detectors/boolean_parameter.rb +0 -1
  118. data/lib/reek/smell_detectors/class_variable.rb +3 -11
  119. data/lib/reek/smell_detectors/control_parameter.rb +17 -32
  120. data/lib/reek/smell_detectors/data_clump.rb +3 -4
  121. data/lib/reek/smell_detectors/duplicate_method_call.rb +6 -7
  122. data/lib/reek/smell_detectors/feature_envy.rb +1 -1
  123. data/lib/reek/smell_detectors/instance_variable_assumption.rb +1 -10
  124. data/lib/reek/smell_detectors/irresponsible_module.rb +0 -1
  125. data/lib/reek/smell_detectors/long_parameter_list.rb +1 -2
  126. data/lib/reek/smell_detectors/long_yield_list.rb +2 -3
  127. data/lib/reek/smell_detectors/manual_dispatch.rb +3 -3
  128. data/lib/reek/smell_detectors/{prima_donna_method.rb → missing_safe_method.rb} +6 -7
  129. data/lib/reek/smell_detectors/module_initialize.rb +1 -2
  130. data/lib/reek/smell_detectors/nested_iterators.rb +6 -6
  131. data/lib/reek/smell_detectors/nil_check.rb +0 -1
  132. data/lib/reek/smell_detectors/repeated_conditional.rb +3 -4
  133. data/lib/reek/smell_detectors/subclassed_from_core_class.rb +0 -1
  134. data/lib/reek/smell_detectors/too_many_constants.rb +2 -3
  135. data/lib/reek/smell_detectors/too_many_instance_variables.rb +1 -2
  136. data/lib/reek/smell_detectors/too_many_methods.rb +1 -2
  137. data/lib/reek/smell_detectors/too_many_statements.rb +1 -2
  138. data/lib/reek/smell_detectors/uncommunicative_method_name.rb +2 -3
  139. data/lib/reek/smell_detectors/uncommunicative_module_name.rb +2 -3
  140. data/lib/reek/smell_detectors/uncommunicative_parameter_name.rb +2 -3
  141. data/lib/reek/smell_detectors/uncommunicative_variable_name.rb +6 -7
  142. data/lib/reek/smell_detectors/unused_parameters.rb +0 -1
  143. data/lib/reek/smell_detectors/unused_private_method.rb +0 -1
  144. data/lib/reek/smell_detectors/utility_function.rb +2 -3
  145. data/lib/reek/smell_detectors.rb +1 -2
  146. data/lib/reek/smell_warning.rb +15 -8
  147. data/lib/reek/source/source_code.rb +50 -72
  148. data/lib/reek/source/source_locator.rb +7 -7
  149. data/lib/reek/spec/should_reek.rb +2 -2
  150. data/lib/reek/spec/should_reek_of.rb +9 -16
  151. data/lib/reek/spec/should_reek_only_of.rb +4 -4
  152. data/lib/reek/spec.rb +6 -6
  153. data/lib/reek/tree_dresser.rb +5 -5
  154. data/lib/reek/version.rb +1 -1
  155. data/reek.gemspec +5 -5
  156. data/samples/checkstyle.xml +1 -1
  157. data/samples/configuration/accepts_rejects_and_excludes_for_detectors.reek.yml +29 -0
  158. data/samples/configuration/accepts_rejects_and_excludes_for_directory_directives.reek.yml +30 -0
  159. data/samples/configuration/full_configuration.reek +8 -4
  160. data/samples/configuration/full_mask.reek +5 -4
  161. data/samples/configuration/partial_mask.reek +3 -2
  162. data/samples/configuration/regular_configuration/.reek.yml +4 -0
  163. data/samples/paths.rb +5 -4
  164. data/samples/source_with_hidden_directories/.hidden/hidden.rb +1 -0
  165. data/samples/source_with_hidden_directories/not_hidden.rb +1 -0
  166. data/spec/factories/factories.rb +2 -13
  167. data/spec/reek/ast/node_spec.rb +103 -10
  168. data/spec/reek/ast/reference_collector_spec.rb +1 -1
  169. data/spec/reek/ast/sexp_extensions_spec.rb +2 -2
  170. data/spec/reek/cli/application_spec.rb +50 -38
  171. data/spec/reek/cli/command/todo_list_command_spec.rb +6 -4
  172. data/spec/reek/cli/silencer_spec.rb +28 -0
  173. data/spec/reek/code_comment_spec.rb +31 -38
  174. data/spec/reek/configuration/app_configuration_spec.rb +46 -33
  175. data/spec/reek/configuration/configuration_file_finder_spec.rb +133 -49
  176. data/spec/reek/configuration/default_directive_spec.rb +1 -1
  177. data/spec/reek/configuration/directory_directives_spec.rb +6 -7
  178. data/spec/reek/configuration/excluded_paths_spec.rb +6 -6
  179. data/spec/reek/configuration/rake_task_converter_spec.rb +33 -0
  180. data/spec/reek/configuration/schema_validator_spec.rb +165 -0
  181. data/spec/reek/context/code_context_spec.rb +60 -96
  182. data/spec/reek/context/ghost_context_spec.rb +1 -1
  183. data/spec/reek/context/root_context_spec.rb +1 -1
  184. data/spec/reek/documentation_link_spec.rb +20 -0
  185. data/spec/reek/errors/base_error_spec.rb +13 -0
  186. data/spec/reek/examiner_spec.rb +100 -30
  187. data/spec/reek/report/code_climate/code_climate_fingerprint_spec.rb +82 -80
  188. data/spec/reek/report/code_climate/code_climate_formatter_spec.rb +6 -6
  189. data/spec/reek/report/json_report_spec.rb +13 -46
  190. data/spec/reek/report/{formatter/location_formatter_spec.rb → location_formatter_spec.rb} +5 -5
  191. data/spec/reek/report/{formatter/progress_formatter_spec.rb → progress_formatter_spec.rb} +4 -4
  192. data/spec/reek/report/text_report_spec.rb +4 -4
  193. data/spec/reek/report/xml_report_spec.rb +3 -3
  194. data/spec/reek/report/yaml_report_spec.rb +9 -38
  195. data/spec/reek/report_spec.rb +3 -3
  196. data/spec/reek/smell_detectors/boolean_parameter_spec.rb +2 -2
  197. data/spec/reek/smell_detectors/class_variable_spec.rb +26 -32
  198. data/spec/reek/smell_detectors/control_parameter_spec.rb +34 -4
  199. data/spec/reek/smell_detectors/duplicate_method_call_spec.rb +3 -3
  200. data/spec/reek/smell_detectors/feature_envy_spec.rb +47 -2
  201. data/spec/reek/smell_detectors/{prima_donna_method_spec.rb → missing_safe_method_spec.rb} +9 -9
  202. data/spec/reek/smell_detectors/module_initialize_spec.rb +14 -0
  203. data/spec/reek/smell_detectors/nested_iterators_spec.rb +1 -1
  204. data/spec/reek/smell_detectors/too_many_constants_spec.rb +3 -3
  205. data/spec/reek/smell_detectors/too_many_instance_variables_spec.rb +1 -1
  206. data/spec/reek/smell_detectors/uncommunicative_method_name_spec.rb +6 -6
  207. data/spec/reek/smell_detectors/uncommunicative_module_name_spec.rb +6 -4
  208. data/spec/reek/smell_detectors/uncommunicative_parameter_name_spec.rb +6 -4
  209. data/spec/reek/smell_detectors/uncommunicative_variable_name_spec.rb +9 -9
  210. data/spec/reek/smell_detectors/unused_parameters_spec.rb +3 -3
  211. data/spec/reek/smell_detectors/unused_private_method_spec.rb +10 -10
  212. data/spec/reek/smell_detectors/utility_function_spec.rb +5 -5
  213. data/spec/reek/smell_warning_spec.rb +12 -8
  214. data/spec/reek/source/source_code_spec.rb +17 -43
  215. data/spec/reek/source/source_locator_spec.rb +17 -17
  216. data/spec/reek/spec/should_reek_of_spec.rb +7 -11
  217. data/spec/reek/spec/should_reek_only_of_spec.rb +2 -2
  218. data/spec/reek/spec/should_reek_spec.rb +3 -3
  219. data/spec/reek/spec/smell_matcher_spec.rb +3 -3
  220. data/spec/reek/tree_dresser_spec.rb +12 -17
  221. data/spec/spec_helper.rb +6 -17
  222. data/tasks/configuration.rake +8 -5
  223. metadata +71 -41
  224. data/defaults.reek +0 -131
  225. data/features/configuration_files/warn_about_multiple_configuration_files.feature +0 -44
  226. data/lib/reek/report/formatter/heading_formatter.rb +0 -52
  227. data/lib/reek/report/formatter/location_formatter.rb +0 -42
  228. data/lib/reek/report/formatter/progress_formatter.rb +0 -81
  229. data/lib/reek/report/formatter/simple_warning_formatter.rb +0 -35
  230. data/lib/reek/report/formatter/wiki_link_warning_formatter.rb +0 -36
  231. data/lib/reek/report/formatter.rb +0 -33
  232. data/lib/reek/smell_detectors/syntax.rb +0 -37
  233. data/samples/configuration/non_public_modifiers_mask.reek +0 -3
  234. data/samples/smelly_with_inline_mask.rb +0 -8
  235. data/samples/smelly_with_modifiers.rb +0 -12
  236. data/samples/source_with_hidden_directories/.hidden/uncommunicative_method_name.rb +0 -5
  237. data/samples/source_with_non_ruby_files/uncommunicative_parameter_name.rb +0 -6
  238. data/spec/reek/smell_detectors/syntax_spec.rb +0 -17
  239. /data/{samples/configuration/more_than_one_configuration_file/regular.reek → .reek.yml} +0 -0
  240. /data/samples/{clean.rb → clean_source/clean.rb} +0 -0
  241. /data/samples/{exceptions.reek → configuration/home/home.reek.yml} +0 -0
  242. /data/samples/configuration/{more_than_one_configuration_file/todo.reek → regular_configuration/empty_sub_directory/.gitignore} +0 -0
  243. /data/samples/{configuration/single_configuration_file/.reek → no_config_file/.keep} +0 -0
  244. /data/samples/{inline.rb → smelly_source/inline.rb} +0 -0
  245. /data/samples/{optparse.rb → smelly_source/optparse.rb} +0 -0
  246. /data/samples/{redcloth.rb → smelly_source/redcloth.rb} +0 -0
  247. /data/samples/{smelly.rb → smelly_source/smelly.rb} +0 -0
  248. /data/samples/{source_with_hidden_directories/uncommunicative_parameter_name.rb → source_with_non_ruby_files/ruby.rb} +0 -0
@@ -5,15 +5,15 @@ require_lib 'reek/source/source_locator'
5
5
 
6
6
  RSpec.describe Reek::Source::SourceLocator do
7
7
  describe '#sources' do
8
- context 'applied to hidden directories' do
9
- let(:path) { SAMPLES_PATH.join('source_with_hidden_directories') }
8
+ context 'when applied to hidden directories' do
9
+ let(:path) { SAMPLES_DIR.join('source_with_hidden_directories') }
10
10
 
11
11
  let(:expected_paths) do
12
- [path.join('uncommunicative_parameter_name.rb')]
12
+ [path.join('not_hidden.rb')]
13
13
  end
14
14
 
15
15
  let(:paths_that_are_expected_to_be_ignored) do
16
- [path.join('.hidden/uncommunicative_method_name.rb')]
16
+ [path.join('.hidden/hidden.rb')]
17
17
  end
18
18
 
19
19
  it 'does not scan hidden directories' do
@@ -30,21 +30,21 @@ RSpec.describe Reek::Source::SourceLocator do
30
30
  end
31
31
 
32
32
  # rubocop:disable RSpec/NestedGroups
33
- context 'exclude paths' do
33
+ context 'with excluded paths' do
34
34
  let(:configuration) do
35
- test_configuration_for(CONFIG_PATH.join('with_excluded_paths.reek'))
35
+ test_configuration_for(CONFIGURATION_DIR.join('with_excluded_paths.reek'))
36
36
  end
37
37
 
38
38
  let(:options) { instance_double('Reek::CLI::Options', force_exclusion?: false) }
39
39
 
40
40
  context 'when the path is absolute' do
41
41
  let(:path) do
42
- SAMPLES_PATH.join('source_with_exclude_paths',
43
- 'ignore_me',
44
- 'uncommunicative_method_name.rb').expand_path
42
+ SAMPLES_DIR.join('source_with_exclude_paths',
43
+ 'ignore_me',
44
+ 'uncommunicative_method_name.rb').expand_path
45
45
  end
46
46
 
47
- context 'and options.force_exclusion? is true' do
47
+ context 'when options.force_exclusion? is true' do
48
48
  before do
49
49
  allow(options).to receive(:force_exclusion?).and_return(true)
50
50
  end
@@ -55,7 +55,7 @@ RSpec.describe Reek::Source::SourceLocator do
55
55
  end
56
56
  end
57
57
 
58
- context 'and options.force_exclusion? is false' do
58
+ context 'when options.force_exclusion? is false' do
59
59
  before do
60
60
  allow(options).to receive(:force_exclusion?).and_return(false)
61
61
  end
@@ -68,7 +68,7 @@ RSpec.describe Reek::Source::SourceLocator do
68
68
  end
69
69
 
70
70
  context 'when the path is a file name in an excluded directory' do
71
- let(:path) { SAMPLES_PATH.join('source_with_exclude_paths', 'ignore_me', 'uncommunicative_method_name.rb') }
71
+ let(:path) { SAMPLES_DIR.join('source_with_exclude_paths', 'ignore_me', 'uncommunicative_method_name.rb') }
72
72
 
73
73
  context 'when options.force_exclusion? is true' do
74
74
  before do
@@ -94,7 +94,7 @@ RSpec.describe Reek::Source::SourceLocator do
94
94
  end
95
95
 
96
96
  context 'when path is a directory' do
97
- let(:path) { SAMPLES_PATH.join('source_with_exclude_paths') }
97
+ let(:path) { SAMPLES_DIR.join('source_with_exclude_paths') }
98
98
 
99
99
  let(:expected_paths) do
100
100
  [path.join('nested/uncommunicative_parameter_name.rb')]
@@ -120,10 +120,10 @@ RSpec.describe Reek::Source::SourceLocator do
120
120
  end
121
121
  # rubocop:enable RSpec/NestedGroups
122
122
 
123
- context 'non-Ruby paths' do
124
- let(:path) { SAMPLES_PATH.join('source_with_non_ruby_files') }
123
+ context 'with non-Ruby paths' do
124
+ let(:path) { SAMPLES_DIR.join('source_with_non_ruby_files') }
125
125
  let(:expected_sources) do
126
- [path.join('uncommunicative_parameter_name.rb')]
126
+ [path.join('ruby.rb')]
127
127
  end
128
128
  let(:paths_that_are_expected_to_be_ignored) do
129
129
  [
@@ -145,7 +145,7 @@ RSpec.describe Reek::Source::SourceLocator do
145
145
  end
146
146
  end
147
147
 
148
- context 'passing "." or "./" as argument' do
148
+ context 'when passing "." or "./" as argument' do
149
149
  let(:expected_sources) do
150
150
  [Pathname.new('spec/spec_helper.rb'), Pathname.new('lib/reek.rb')]
151
151
  end
@@ -11,17 +11,13 @@ RSpec.describe Reek::Spec::ShouldReekOf do
11
11
  expect(ruby).to reek_of(:DuplicateMethodCall)
12
12
  end
13
13
 
14
- it 'reports duplicate calls by smell detector class' do
15
- expect(ruby).to reek_of(Reek::SmellDetectors::DuplicateMethodCall)
16
- end
17
-
18
14
  it 'does not report any feature envy' do
19
15
  expect(ruby).not_to reek_of(:FeatureEnvy)
20
16
  end
21
17
  end
22
18
 
23
19
  describe 'different sources of input' do
24
- context 'checking code in a string' do
20
+ context 'when checking code in a string' do
25
21
  let(:clean_code) { 'def good() true; end' }
26
22
  let(:matcher) { described_class.new(:UncommunicativeVariableName, name: 'y') }
27
23
  let(:smelly_code) { 'def x() y = 4; end' }
@@ -40,7 +36,7 @@ RSpec.describe Reek::Spec::ShouldReekOf do
40
36
  end
41
37
  end
42
38
 
43
- context 'checking code in a File' do
39
+ context 'when checking code in a File' do
44
40
  let(:matcher) { described_class.new(:UncommunicativeMethodName, name: 'x') }
45
41
 
46
42
  it 'matches a smelly file' do
@@ -54,7 +50,7 @@ RSpec.describe Reek::Spec::ShouldReekOf do
54
50
  end
55
51
 
56
52
  describe 'smell types and smell details' do
57
- context 'passing in smell_details with unknown parameter name' do
53
+ context 'when passing in smell_details with unknown parameter name' do
58
54
  let(:matcher) { described_class.new(:UncommunicativeVariableName, foo: 'y') }
59
55
  let(:smelly_code) { 'def x() y = 4; end' }
60
56
 
@@ -63,7 +59,7 @@ RSpec.describe Reek::Spec::ShouldReekOf do
63
59
  end
64
60
  end
65
61
 
66
- context 'both are matching' do
62
+ context 'when both are matching' do
67
63
  let(:matcher) { described_class.new(:UncommunicativeVariableName, name: 'y') }
68
64
  let(:smelly_code) { 'def x() y = 4; end' }
69
65
 
@@ -72,7 +68,7 @@ RSpec.describe Reek::Spec::ShouldReekOf do
72
68
  end
73
69
  end
74
70
 
75
- context 'no smell_type is matching' do
71
+ context 'when no smell_type is matching' do
76
72
  let(:smelly_code) { 'def dummy() y = 4; end' }
77
73
 
78
74
  let(:falsey_matcher) { described_class.new(:FeatureEnvy, name: 'y') }
@@ -97,7 +93,7 @@ RSpec.describe Reek::Spec::ShouldReekOf do
97
93
  end
98
94
  end
99
95
 
100
- context 'smell type is matching but smell details are not' do
96
+ context 'when smell type is matching but smell details are not' do
101
97
  let(:smelly_code) { 'def double_thing() @other.thing.foo + @other.thing.foo end' }
102
98
  let(:matcher) { described_class.new(:DuplicateMethodCall, name: 'foo', count: 15) }
103
99
 
@@ -129,7 +125,7 @@ RSpec.describe Reek::Spec::ShouldReekOf do
129
125
  end
130
126
  end
131
127
 
132
- context 'for a smell that is disabled by default' do
128
+ context 'with a smell that is disabled by default' do
133
129
  it 'enables the smell detector to match automatically' do
134
130
  default_config = Reek::SmellDetectors::UnusedPrivateMethod.default_config
135
131
  src = 'class C; private; def foo; end; end'
@@ -21,7 +21,7 @@ RSpec.describe Reek::Spec::ShouldReekOnlyOf do
21
21
  context 'when a match was expected' do
22
22
  let(:source) { 'the_path/to_a/source_file.rb' }
23
23
 
24
- before { allow(examiner).to receive(:description).and_return(source) }
24
+ before { allow(examiner).to receive(:origin).and_return(source) }
25
25
 
26
26
  it 'reports the source' do
27
27
  expect(matcher.failure_message).to match(source)
@@ -91,7 +91,7 @@ RSpec.describe Reek::Spec::ShouldReekOnlyOf do
91
91
 
92
92
  it 'reports the source when no match was expected' do
93
93
  source = 'the_path/to_a/source_file.rb'
94
- allow(examiner).to receive(:description).and_return(source)
94
+ allow(examiner).to receive(:origin).and_return(source)
95
95
  expect(matcher.failure_message_when_negated).to match(source)
96
96
  end
97
97
  end
@@ -22,7 +22,7 @@ RSpec.describe Reek::Spec::ShouldReek do
22
22
  end
23
23
 
24
24
  describe 'checking code in a File' do
25
- context 'matcher without masking' do
25
+ context 'without masking' do
26
26
  let(:matcher) { described_class.new }
27
27
 
28
28
  it 'matches a smelly File' do
@@ -39,8 +39,8 @@ RSpec.describe Reek::Spec::ShouldReek do
39
39
  end
40
40
  end
41
41
 
42
- context 'matcher without masking' do
43
- let(:path) { CONFIG_PATH.join('full_mask.reek') }
42
+ context 'with masking' do
43
+ let(:path) { CONFIGURATION_DIR.join('full_mask.reek') }
44
44
  let(:configuration) { test_configuration_for(path) }
45
45
  let(:matcher) { described_class.new(configuration: configuration) }
46
46
 
@@ -10,7 +10,7 @@ RSpec.describe Reek::Spec::SmellMatcher do
10
10
  end
11
11
  let(:matcher) { described_class.new(smell_warning) }
12
12
 
13
- context '#matches?' do
13
+ describe '#matches?' do
14
14
  it 'matches on class symbol' do
15
15
  expect(matcher).to be_matches(:UncommunicativeVariableName)
16
16
  end
@@ -50,7 +50,7 @@ RSpec.describe Reek::Spec::SmellMatcher do
50
50
  end
51
51
  end
52
52
 
53
- context '#matches_smell_type?' do
53
+ describe '#matches_smell_type?' do
54
54
  it 'matches on class symbol' do
55
55
  expect(matcher).to be_matches_smell_type(:UncommunicativeVariableName)
56
56
  end
@@ -60,7 +60,7 @@ RSpec.describe Reek::Spec::SmellMatcher do
60
60
  end
61
61
  end
62
62
 
63
- context '#matches_attributes?' do
63
+ describe '#matches_attributes?' do
64
64
  it 'matches on params' do
65
65
  expect(matcher).to be_matches_attributes(test: 'something')
66
66
  end
@@ -1,17 +1,15 @@
1
- require_lib 'reek/cli/silencer'
2
- Reek::CLI::Silencer.silently do
3
- require 'parser/ruby22'
4
- end
5
-
6
1
  require_relative '../spec_helper'
2
+ Reek::CLI::Silencer.without_warnings { require 'parser/ruby25' }
7
3
  require_lib 'reek/tree_dresser'
8
4
 
9
5
  RSpec.describe Reek::TreeDresser do
10
- let(:dresser) { described_class.new }
11
- let(:sexp) do
12
- Parser::Ruby22.parse('class Klazz; def meth(argument); argument.call_me; end; end')
13
- end
14
- let(:dressed_ast) do
6
+ describe '#dress' do
7
+ let(:dresser) { described_class.new }
8
+ let(:sexp) do
9
+ Parser::Ruby25.parse('class Klazz; def meth(argument); argument.call_me; end; end')
10
+ end
11
+ let(:dressed_ast) { dresser.dress(sexp, {}) }
12
+
15
13
  # The dressed AST looks like this:
16
14
  # (class
17
15
  # (const nil :Klazz) nil
@@ -20,14 +18,11 @@ RSpec.describe Reek::TreeDresser do
20
18
  # (arg :argument))
21
19
  # (send
22
20
  # (lvar :argument) :call_me)))
23
- dresser.dress(sexp, {})
24
- end
25
- let(:const_node) { dressed_ast.children.first }
26
- let(:def_node) { dressed_ast.children.last }
27
- let(:args_node) { def_node.children[1] }
28
- let(:send_node) { def_node.children[2] }
21
+ let(:const_node) { dressed_ast.children.first }
22
+ let(:def_node) { dressed_ast.children.last }
23
+ let(:args_node) { def_node.children[1] }
24
+ let(:send_node) { def_node.children[2] }
29
25
 
30
- context 'dresses the given sexp' do
31
26
  it 'dresses `const` nodes properly' do
32
27
  expect(const_node).to be_a Reek::AST::SexpExtensions::ConstNode
33
28
  end
data/spec/spec_helper.rb CHANGED
@@ -8,15 +8,13 @@ require_relative '../lib/reek/configuration/app_configuration'
8
8
 
9
9
  require_relative '../samples/paths'
10
10
 
11
- Reek::CLI::Silencer.silently do
12
- begin
13
- require 'pry-byebug'
14
- rescue LoadError # rubocop:disable Lint/HandleExceptions
15
- end
11
+ begin
12
+ Reek::CLI::Silencer.without_warnings { require 'pry-byebug' }
13
+ rescue LoadError # rubocop:disable Lint/HandleExceptions
16
14
  end
17
15
 
18
- require 'factory_girl'
19
- FactoryGirl.find_definitions
16
+ require 'factory_bot'
17
+ FactoryBot.find_definitions
20
18
 
21
19
  # Simple helpers for our specs.
22
20
  module Helpers
@@ -76,7 +74,7 @@ end
76
74
  RSpec.configure do |config|
77
75
  config.filter_run :focus
78
76
  config.run_all_when_everything_filtered = true
79
- config.include FactoryGirl::Syntax::Methods
77
+ config.include FactoryBot::Syntax::Methods
80
78
  config.include Helpers
81
79
 
82
80
  config.disable_monkey_patching!
@@ -85,15 +83,6 @@ RSpec.configure do |config|
85
83
  mocks.verify_partial_doubles = true
86
84
  mocks.verify_doubled_constant_names = true
87
85
  end
88
-
89
- # Avoid infinitely running tests. This is mainly useful when running a
90
- # mutation tester. Set the DEBUG environment variable to something truthy
91
- # like '1' to disable this and allow using pry without specs failing.
92
- unless ENV['DEBUG']
93
- config.around do |example|
94
- Timeout.timeout(5, &example)
95
- end
96
- end
97
86
  end
98
87
 
99
88
  RSpec::Matchers.define_negated_matcher :not_reek_of, :reek_of
@@ -1,15 +1,18 @@
1
1
  require_relative '../lib/reek/detector_repository'
2
+ require_relative '../lib/reek/configuration/rake_task_converter'
3
+ require_relative '../lib/reek/configuration/app_configuration'
4
+
2
5
  require 'yaml'
3
6
 
4
7
  namespace :configuration do
5
8
  desc 'Updates the default configuration file when smell defaults change'
6
9
  task :update_default_configuration do
7
- DEFAULT_SMELL_CONFIGURATION = 'defaults.reek'.freeze
10
+ DEFAULT_SMELL_CONFIGURATION = 'docs/defaults.reek.yml'.freeze
8
11
  content = Reek::DetectorRepository.smell_types.each_with_object({}) do |klass, hash|
9
- hash[klass.smell_type] = klass.default_config
12
+ hash[klass.smell_type] = Reek::Configuration::RakeTaskConverter.convert klass.default_config
13
+ end
14
+ File.open(DEFAULT_SMELL_CONFIGURATION, 'w') do |file|
15
+ YAML.dump({ Reek::Configuration::AppConfiguration::DETECTORS_KEY => content }, file)
10
16
  end
11
- File.open(DEFAULT_SMELL_CONFIGURATION, 'w') { |file| YAML.dump(content, file) }
12
17
  end
13
18
  end
14
-
15
- task 'test:spec' => 'configuration:update_default_configuration'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: reek
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.7.3
4
+ version: 5.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Rutherford
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2017-11-05 00:00:00.000000000 Z
14
+ date: 2018-06-29 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: codeclimate-engine-rb
@@ -27,40 +27,60 @@ dependencies:
27
27
  - - "~>"
28
28
  - !ruby/object:Gem::Version
29
29
  version: 0.4.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: kwalify
32
+ requirement: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - "~>"
35
+ - !ruby/object:Gem::Version
36
+ version: 0.7.0
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - "~>"
42
+ - !ruby/object:Gem::Version
43
+ version: 0.7.0
30
44
  - !ruby/object:Gem::Dependency
31
45
  name: parser
32
46
  requirement: !ruby/object:Gem::Requirement
33
47
  requirements:
34
48
  - - "<"
35
49
  - !ruby/object:Gem::Version
36
- version: '2.5'
50
+ version: '2.6'
37
51
  - - ">="
38
52
  - !ruby/object:Gem::Version
39
- version: 2.4.0.0
53
+ version: 2.5.0.0
40
54
  type: :runtime
41
55
  prerelease: false
42
56
  version_requirements: !ruby/object:Gem::Requirement
43
57
  requirements:
44
58
  - - "<"
45
59
  - !ruby/object:Gem::Version
46
- version: '2.5'
60
+ version: '2.6'
47
61
  - - ">="
48
62
  - !ruby/object:Gem::Version
49
- version: 2.4.0.0
63
+ version: 2.5.0.0
50
64
  - !ruby/object:Gem::Dependency
51
65
  name: rainbow
52
66
  requirement: !ruby/object:Gem::Requirement
53
67
  requirements:
54
- - - "~>"
68
+ - - ">="
55
69
  - !ruby/object:Gem::Version
56
70
  version: '2.0'
71
+ - - "<"
72
+ - !ruby/object:Gem::Version
73
+ version: '4.0'
57
74
  type: :runtime
58
75
  prerelease: false
59
76
  version_requirements: !ruby/object:Gem::Requirement
60
77
  requirements:
61
- - - "~>"
78
+ - - ">="
62
79
  - !ruby/object:Gem::Version
63
80
  version: '2.0'
81
+ - - "<"
82
+ - !ruby/object:Gem::Version
83
+ version: '4.0'
64
84
  description: Reek is a tool that examines Ruby classes, modules and methods and reports
65
85
  any code smells it finds.
66
86
  email:
@@ -76,6 +96,7 @@ files:
76
96
  - ".codeclimate.yml"
77
97
  - ".dockerignore"
78
98
  - ".gitignore"
99
+ - ".reek.yml"
79
100
  - ".rubocop.yml"
80
101
  - ".simplecov"
81
102
  - ".travis.yml"
@@ -90,7 +111,6 @@ files:
90
111
  - ataru_setup.rb
91
112
  - bin/code_climate_reek
92
113
  - bin/reek
93
- - defaults.reek
94
114
  - docs/API.md
95
115
  - docs/Attribute.md
96
116
  - docs/Basic-Smell-Options.md
@@ -111,12 +131,13 @@ files:
111
131
  - docs/Long-Parameter-List.md
112
132
  - docs/Long-Yield-List.md
113
133
  - docs/Manual-Dispatch.md
134
+ - docs/Missing-Safe-Method.md
114
135
  - docs/Module-Initialize.md
115
136
  - docs/Nested-Iterators.md
116
137
  - docs/Nil-Check.md
117
- - docs/Prima-Donna-Method.md
118
138
  - docs/RSpec-matchers.md
119
139
  - docs/Rake-Task.md
140
+ - docs/Reek-4-to-Reek-5-migration.md
120
141
  - docs/Reek-Driven-Development.md
121
142
  - docs/Repeated-Conditional.md
122
143
  - docs/Simulated-Polymorphism.md
@@ -137,6 +158,7 @@ files:
137
158
  - docs/Utility-Function.md
138
159
  - docs/Versioning-Policy.md
139
160
  - docs/YAML-Reports.md
161
+ - docs/defaults.reek.yml
140
162
  - docs/templates/default/docstring/html/public_api_marker.erb
141
163
  - docs/templates/default/docstring/setup.rb
142
164
  - docs/templates/default/fulldoc/html/css/common.css
@@ -155,8 +177,8 @@ files:
155
177
  - features/configuration_files/masking_smells.feature
156
178
  - features/configuration_files/mix_accept_reject_setting.feature
157
179
  - features/configuration_files/reject_setting.feature
180
+ - features/configuration_files/schema_validation.feature
158
181
  - features/configuration_files/unused_private_method.feature
159
- - features/configuration_files/warn_about_multiple_configuration_files.feature
160
182
  - features/configuration_loading.feature
161
183
  - features/configuration_via_source_comments/erroneous_source_comments.feature
162
184
  - features/configuration_via_source_comments/well_formed_source_comments.feature
@@ -210,11 +232,15 @@ files:
210
232
  - lib/reek/cli/status.rb
211
233
  - lib/reek/code_comment.rb
212
234
  - lib/reek/configuration/app_configuration.rb
235
+ - lib/reek/configuration/configuration_converter.rb
213
236
  - lib/reek/configuration/configuration_file_finder.rb
214
237
  - lib/reek/configuration/configuration_validator.rb
215
238
  - lib/reek/configuration/default_directive.rb
216
239
  - lib/reek/configuration/directory_directives.rb
217
240
  - lib/reek/configuration/excluded_paths.rb
241
+ - lib/reek/configuration/rake_task_converter.rb
242
+ - lib/reek/configuration/schema.yml
243
+ - lib/reek/configuration/schema_validator.rb
218
244
  - lib/reek/context/attribute_context.rb
219
245
  - lib/reek/context/class_context.rb
220
246
  - lib/reek/context/code_context.rb
@@ -229,12 +255,15 @@ files:
229
255
  - lib/reek/context/visibility_tracker.rb
230
256
  - lib/reek/context_builder.rb
231
257
  - lib/reek/detector_repository.rb
258
+ - lib/reek/documentation_link.rb
232
259
  - lib/reek/errors/bad_detector_configuration_key_in_comment_error.rb
233
260
  - lib/reek/errors/bad_detector_in_comment_error.rb
234
261
  - lib/reek/errors/base_error.rb
262
+ - lib/reek/errors/config_file_error.rb
235
263
  - lib/reek/errors/encoding_error.rb
236
264
  - lib/reek/errors/garbage_detector_configuration_in_comment_error.rb
237
265
  - lib/reek/errors/incomprehensible_source_error.rb
266
+ - lib/reek/errors/syntax_error.rb
238
267
  - lib/reek/examiner.rb
239
268
  - lib/reek/logging_error_handler.rb
240
269
  - lib/reek/rake/task.rb
@@ -246,15 +275,14 @@ files:
246
275
  - lib/reek/report/code_climate/code_climate_fingerprint.rb
247
276
  - lib/reek/report/code_climate/code_climate_formatter.rb
248
277
  - lib/reek/report/code_climate/code_climate_report.rb
249
- - lib/reek/report/formatter.rb
250
- - lib/reek/report/formatter/heading_formatter.rb
251
- - lib/reek/report/formatter/location_formatter.rb
252
- - lib/reek/report/formatter/progress_formatter.rb
253
- - lib/reek/report/formatter/simple_warning_formatter.rb
254
- - lib/reek/report/formatter/wiki_link_warning_formatter.rb
278
+ - lib/reek/report/documentation_link_warning_formatter.rb
279
+ - lib/reek/report/heading_formatter.rb
255
280
  - lib/reek/report/html_report.rb
256
281
  - lib/reek/report/html_report/html_report.html.erb
257
282
  - lib/reek/report/json_report.rb
283
+ - lib/reek/report/location_formatter.rb
284
+ - lib/reek/report/progress_formatter.rb
285
+ - lib/reek/report/simple_warning_formatter.rb
258
286
  - lib/reek/report/text_report.rb
259
287
  - lib/reek/report/xml_report.rb
260
288
  - lib/reek/report/yaml_report.rb
@@ -273,13 +301,12 @@ files:
273
301
  - lib/reek/smell_detectors/long_parameter_list.rb
274
302
  - lib/reek/smell_detectors/long_yield_list.rb
275
303
  - lib/reek/smell_detectors/manual_dispatch.rb
304
+ - lib/reek/smell_detectors/missing_safe_method.rb
276
305
  - lib/reek/smell_detectors/module_initialize.rb
277
306
  - lib/reek/smell_detectors/nested_iterators.rb
278
307
  - lib/reek/smell_detectors/nil_check.rb
279
- - lib/reek/smell_detectors/prima_donna_method.rb
280
308
  - lib/reek/smell_detectors/repeated_conditional.rb
281
309
  - lib/reek/smell_detectors/subclassed_from_core_class.rb
282
- - lib/reek/smell_detectors/syntax.rb
283
310
  - lib/reek/smell_detectors/too_many_constants.rb
284
311
  - lib/reek/smell_detectors/too_many_instance_variables.rb
285
312
  - lib/reek/smell_detectors/too_many_methods.rb
@@ -309,33 +336,32 @@ files:
309
336
  - logo/reek.text.svg
310
337
  - reek.gemspec
311
338
  - samples/checkstyle.xml
312
- - samples/clean.rb
339
+ - samples/clean_source/clean.rb
340
+ - samples/configuration/accepts_rejects_and_excludes_for_detectors.reek.yml
341
+ - samples/configuration/accepts_rejects_and_excludes_for_directory_directives.reek.yml
313
342
  - samples/configuration/corrupt.reek
314
343
  - samples/configuration/empty.reek
315
344
  - samples/configuration/full_configuration.reek
316
345
  - samples/configuration/full_mask.reek
317
- - samples/configuration/more_than_one_configuration_file/regular.reek
318
- - samples/configuration/more_than_one_configuration_file/todo.reek
319
- - samples/configuration/non_public_modifiers_mask.reek
346
+ - samples/configuration/home/home.reek.yml
320
347
  - samples/configuration/partial_mask.reek
321
- - samples/configuration/single_configuration_file/.reek
348
+ - samples/configuration/regular_configuration/.reek.yml
349
+ - samples/configuration/regular_configuration/empty_sub_directory/.gitignore
322
350
  - samples/configuration/with_excluded_paths.reek
323
- - samples/exceptions.reek
324
- - samples/inline.rb
325
- - samples/optparse.rb
351
+ - samples/no_config_file/.keep
326
352
  - samples/paths.rb
327
- - samples/redcloth.rb
328
- - samples/smelly.rb
329
- - samples/smelly_with_inline_mask.rb
330
- - samples/smelly_with_modifiers.rb
353
+ - samples/smelly_source/inline.rb
354
+ - samples/smelly_source/optparse.rb
355
+ - samples/smelly_source/redcloth.rb
356
+ - samples/smelly_source/smelly.rb
331
357
  - samples/source_with_exclude_paths/ignore_me/uncommunicative_method_name.rb
332
358
  - samples/source_with_exclude_paths/nested/ignore_me_as_well/irresponsible_module.rb
333
359
  - samples/source_with_exclude_paths/nested/uncommunicative_parameter_name.rb
334
- - samples/source_with_hidden_directories/.hidden/uncommunicative_method_name.rb
335
- - samples/source_with_hidden_directories/uncommunicative_parameter_name.rb
360
+ - samples/source_with_hidden_directories/.hidden/hidden.rb
361
+ - samples/source_with_hidden_directories/not_hidden.rb
336
362
  - samples/source_with_non_ruby_files/gibberish
337
363
  - samples/source_with_non_ruby_files/python_source.py
338
- - samples/source_with_non_ruby_files/uncommunicative_parameter_name.rb
364
+ - samples/source_with_non_ruby_files/ruby.rb
339
365
  - spec/factories/factories.rb
340
366
  - spec/quality/reek_source_spec.rb
341
367
  - spec/reek/ast/node_spec.rb
@@ -346,12 +372,15 @@ files:
346
372
  - spec/reek/cli/command/report_command_spec.rb
347
373
  - spec/reek/cli/command/todo_list_command_spec.rb
348
374
  - spec/reek/cli/options_spec.rb
375
+ - spec/reek/cli/silencer_spec.rb
349
376
  - spec/reek/code_comment_spec.rb
350
377
  - spec/reek/configuration/app_configuration_spec.rb
351
378
  - spec/reek/configuration/configuration_file_finder_spec.rb
352
379
  - spec/reek/configuration/default_directive_spec.rb
353
380
  - spec/reek/configuration/directory_directives_spec.rb
354
381
  - spec/reek/configuration/excluded_paths_spec.rb
382
+ - spec/reek/configuration/rake_task_converter_spec.rb
383
+ - spec/reek/configuration/schema_validator_spec.rb
355
384
  - spec/reek/context/code_context_spec.rb
356
385
  - spec/reek/context/ghost_context_spec.rb
357
386
  - spec/reek/context/method_context_spec.rb
@@ -360,6 +389,8 @@ files:
360
389
  - spec/reek/context/statement_counter_spec.rb
361
390
  - spec/reek/context_builder_spec.rb
362
391
  - spec/reek/detector_repository_spec.rb
392
+ - spec/reek/documentation_link_spec.rb
393
+ - spec/reek/errors/base_error_spec.rb
363
394
  - spec/reek/examiner_spec.rb
364
395
  - spec/reek/logging_error_handler_spec.rb
365
396
  - spec/reek/rake/task_spec.rb
@@ -367,10 +398,10 @@ files:
367
398
  - spec/reek/report/code_climate/code_climate_fingerprint_spec.rb
368
399
  - spec/reek/report/code_climate/code_climate_formatter_spec.rb
369
400
  - spec/reek/report/code_climate/code_climate_report_spec.rb
370
- - spec/reek/report/formatter/location_formatter_spec.rb
371
- - spec/reek/report/formatter/progress_formatter_spec.rb
372
401
  - spec/reek/report/html_report_spec.rb
373
402
  - spec/reek/report/json_report_spec.rb
403
+ - spec/reek/report/location_formatter_spec.rb
404
+ - spec/reek/report/progress_formatter_spec.rb
374
405
  - spec/reek/report/text_report_spec.rb
375
406
  - spec/reek/report/xml_report_spec.rb
376
407
  - spec/reek/report/yaml_report_spec.rb
@@ -389,13 +420,12 @@ files:
389
420
  - spec/reek/smell_detectors/long_parameter_list_spec.rb
390
421
  - spec/reek/smell_detectors/long_yield_list_spec.rb
391
422
  - spec/reek/smell_detectors/manual_dispatch_spec.rb
423
+ - spec/reek/smell_detectors/missing_safe_method_spec.rb
392
424
  - spec/reek/smell_detectors/module_initialize_spec.rb
393
425
  - spec/reek/smell_detectors/nested_iterators_spec.rb
394
426
  - spec/reek/smell_detectors/nil_check_spec.rb
395
- - spec/reek/smell_detectors/prima_donna_method_spec.rb
396
427
  - spec/reek/smell_detectors/repeated_conditional_spec.rb
397
428
  - spec/reek/smell_detectors/subclassed_from_core_class_spec.rb
398
- - spec/reek/smell_detectors/syntax_spec.rb
399
429
  - spec/reek/smell_detectors/too_many_constants_spec.rb
400
430
  - spec/reek/smell_detectors/too_many_instance_variables_spec.rb
401
431
  - spec/reek/smell_detectors/too_many_methods_spec.rb
@@ -422,7 +452,7 @@ files:
422
452
  - tasks/reek.rake
423
453
  - tasks/rubocop.rake
424
454
  - tasks/test.rake
425
- homepage: https://github.com/troessner/reek/wiki
455
+ homepage: https://github.com/troessner/reek
426
456
  licenses:
427
457
  - MIT
428
458
  metadata: {}
@@ -438,7 +468,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
438
468
  requirements:
439
469
  - - ">="
440
470
  - !ruby/object:Gem::Version
441
- version: 2.1.0
471
+ version: 2.3.0
442
472
  required_rubygems_version: !ruby/object:Gem::Requirement
443
473
  requirements:
444
474
  - - ">="
@@ -446,7 +476,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
446
476
  version: '0'
447
477
  requirements: []
448
478
  rubyforge_project:
449
- rubygems_version: 2.6.13
479
+ rubygems_version: 2.5.2.2
450
480
  signing_key:
451
481
  specification_version: 4
452
482
  summary: Code smell detector for Ruby