reek 2.0.4 → 3.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 (275) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +13 -0
  3. data/.rubocop.yml +47 -0
  4. data/.travis.yml +31 -0
  5. data/.yardopts +3 -6
  6. data/CHANGELOG +24 -0
  7. data/CONTRIBUTING.md +111 -0
  8. data/Gemfile +16 -0
  9. data/README.md +112 -59
  10. data/bin/reek +2 -2
  11. data/config/cucumber.yml +3 -0
  12. data/config/defaults.reek +0 -1
  13. data/docs/API.md +79 -0
  14. data/docs/Attribute.md +43 -0
  15. data/docs/Basic-Smell-Options.md +44 -0
  16. data/docs/Boolean-Parameter.md +52 -0
  17. data/docs/Class-Variable.md +40 -0
  18. data/docs/Code-Smells.md +34 -0
  19. data/docs/Command-Line-Options.md +84 -0
  20. data/docs/Configuration-Files.md +49 -0
  21. data/docs/Control-Couple.md +22 -0
  22. data/docs/Control-Parameter.md +29 -0
  23. data/docs/Data-Clump.md +44 -0
  24. data/docs/Duplicate-Method-Call.md +49 -0
  25. data/docs/Feature-Envy.md +49 -0
  26. data/docs/How-reek-works-internally.md +114 -0
  27. data/docs/Irresponsible-Module.md +39 -0
  28. data/docs/Large-Class.md +20 -0
  29. data/docs/Long-Parameter-List.md +38 -0
  30. data/docs/Long-Yield-List.md +36 -0
  31. data/docs/Module-Initialize.md +62 -0
  32. data/docs/Nested-Iterators.md +38 -0
  33. data/docs/Nil-Check.md +39 -0
  34. data/docs/Prima-Donna-Method.md +53 -0
  35. data/docs/RSpec-matchers.md +137 -0
  36. data/docs/Rake-Task.md +58 -0
  37. data/docs/Reek-Driven-Development.md +37 -0
  38. data/docs/Repeated-Conditional.md +44 -0
  39. data/docs/Simulated-Polymorphism.md +16 -0
  40. data/docs/Smell-Suppression.md +32 -0
  41. data/docs/Too-Many-Instance-Variables.md +43 -0
  42. data/docs/Too-Many-Methods.md +55 -0
  43. data/docs/Too-Many-Statements.md +50 -0
  44. data/docs/Uncommunicative-Method-Name.md +24 -0
  45. data/docs/Uncommunicative-Module-Name.md +23 -0
  46. data/docs/Uncommunicative-Name.md +16 -0
  47. data/docs/Uncommunicative-Parameter-Name.md +24 -0
  48. data/docs/Uncommunicative-Variable-Name.md +24 -0
  49. data/docs/Unused-Parameters.md +27 -0
  50. data/docs/Utility-Function.md +44 -0
  51. data/docs/Versioning-Policy.md +7 -0
  52. data/docs/YAML-Reports.md +111 -0
  53. data/docs/yard_plugin.rb +14 -0
  54. data/features/{ruby_api/api.feature → command_line_interface/basic_usage.feature} +6 -5
  55. data/features/command_line_interface/options.feature +1 -0
  56. data/features/command_line_interface/smell_selection.feature +4 -8
  57. data/features/command_line_interface/smells_count.feature +25 -32
  58. data/features/command_line_interface/stdin.feature +2 -2
  59. data/features/configuration_files/masking_smells.feature +30 -41
  60. data/features/configuration_files/overrides_defaults.feature +5 -3
  61. data/features/configuration_loading.feature +26 -23
  62. data/features/programmatic_access.feature +43 -0
  63. data/features/rake_task/rake_task.feature +25 -22
  64. data/features/reports/json.feature +24 -26
  65. data/features/reports/reports.feature +77 -103
  66. data/features/reports/yaml.feature +26 -20
  67. data/features/samples.feature +26 -31
  68. data/features/step_definitions/.rubocop.yml +5 -0
  69. data/features/step_definitions/reek_steps.rb +16 -28
  70. data/features/step_definitions/sample_file_steps.rb +158 -0
  71. data/features/support/env.rb +16 -27
  72. data/lib/reek/{source → ast}/ast_node_class_map.rb +11 -12
  73. data/lib/reek/ast/node.rb +132 -0
  74. data/lib/reek/{core → ast}/object_refs.rb +2 -1
  75. data/lib/reek/ast/reference_collector.rb +32 -0
  76. data/lib/reek/{source → ast}/sexp_extensions.rb +43 -7
  77. data/lib/reek/ast/sexp_formatter.rb +31 -0
  78. data/lib/reek/cli/application.rb +5 -4
  79. data/lib/reek/cli/command.rb +2 -1
  80. data/lib/reek/cli/input.rb +6 -5
  81. data/lib/reek/cli/option_interpreter.rb +13 -9
  82. data/lib/reek/cli/options.rb +16 -8
  83. data/lib/reek/cli/reek_command.rb +4 -3
  84. data/lib/reek/cli/silencer.rb +14 -0
  85. data/lib/reek/{core → cli}/warning_collector.rb +2 -1
  86. data/lib/reek/code_comment.rb +36 -0
  87. data/lib/reek/configuration/app_configuration.rb +18 -3
  88. data/lib/reek/configuration/configuration_file_finder.rb +18 -32
  89. data/lib/reek/{core → context}/code_context.rb +8 -6
  90. data/lib/reek/{core → context}/method_context.rb +11 -5
  91. data/lib/reek/{core → context}/module_context.rb +9 -4
  92. data/lib/reek/{core/stop_context.rb → context/root_context.rb} +4 -2
  93. data/lib/reek/{core → context}/singleton_method_context.rb +3 -6
  94. data/lib/reek/examiner.rb +32 -29
  95. data/lib/reek/report/formatter.rb +70 -0
  96. data/lib/reek/report/heading_formatter.rb +45 -0
  97. data/lib/reek/report/location_formatter.rb +35 -0
  98. data/lib/reek/report/report.rb +198 -0
  99. data/lib/reek/smells/attribute.rb +41 -11
  100. data/lib/reek/smells/boolean_parameter.rb +4 -2
  101. data/lib/reek/smells/class_variable.rb +4 -2
  102. data/lib/reek/smells/control_parameter.rb +4 -2
  103. data/lib/reek/smells/data_clump.rb +4 -3
  104. data/lib/reek/smells/duplicate_method_call.rb +15 -5
  105. data/lib/reek/smells/feature_envy.rb +8 -2
  106. data/lib/reek/smells/irresponsible_module.rb +13 -8
  107. data/lib/reek/smells/long_parameter_list.rb +6 -4
  108. data/lib/reek/smells/long_yield_list.rb +4 -2
  109. data/lib/reek/smells/module_initialize.rb +4 -2
  110. data/lib/reek/smells/nested_iterators.rb +4 -2
  111. data/lib/reek/smells/nil_check.rb +6 -3
  112. data/lib/reek/smells/prima_donna_method.rb +21 -12
  113. data/lib/reek/smells/repeated_conditional.rb +7 -4
  114. data/lib/reek/{core → smells}/smell_configuration.rb +3 -1
  115. data/lib/reek/smells/smell_detector.rb +11 -5
  116. data/lib/reek/{core → smells}/smell_repository.rb +9 -5
  117. data/lib/reek/smells/smell_warning.rb +101 -0
  118. data/lib/reek/smells/too_many_instance_variables.rb +4 -2
  119. data/lib/reek/smells/too_many_methods.rb +4 -2
  120. data/lib/reek/smells/too_many_statements.rb +4 -2
  121. data/lib/reek/smells/uncommunicative_method_name.rb +4 -2
  122. data/lib/reek/smells/uncommunicative_module_name.rb +4 -2
  123. data/lib/reek/smells/uncommunicative_parameter_name.rb +4 -2
  124. data/lib/reek/smells/uncommunicative_variable_name.rb +4 -2
  125. data/lib/reek/smells/unused_parameters.rb +4 -2
  126. data/lib/reek/smells/utility_function.rb +11 -22
  127. data/lib/reek/smells.rb +24 -11
  128. data/lib/reek/source/source_code.rb +69 -12
  129. data/lib/reek/source/source_locator.rb +34 -19
  130. data/lib/reek/spec/should_reek.rb +4 -3
  131. data/lib/reek/spec/should_reek_of.rb +2 -1
  132. data/lib/reek/spec/should_reek_only_of.rb +4 -3
  133. data/lib/reek/spec.rb +3 -3
  134. data/lib/reek/tree_dresser.rb +32 -0
  135. data/lib/reek/tree_walker.rb +182 -0
  136. data/lib/reek/version.rb +1 -1
  137. data/lib/reek.rb +3 -3
  138. data/reek.gemspec +18 -25
  139. data/spec/factories/factories.rb +4 -2
  140. data/spec/gem/updates_spec.rb +1 -1
  141. data/spec/gem/yard_spec.rb +2 -2
  142. data/spec/quality/reek_source_spec.rb +3 -3
  143. data/spec/reek/{source/sexp_node_spec.rb → ast/node_spec.rb} +4 -6
  144. data/spec/reek/{core → ast}/object_refs_spec.rb +4 -6
  145. data/spec/reek/{source → ast}/reference_collector_spec.rb +27 -19
  146. data/spec/reek/{source → ast}/sexp_extensions_spec.rb +7 -19
  147. data/spec/reek/{source → ast}/sexp_formatter_spec.rb +13 -8
  148. data/spec/reek/cli/option_interpreter_spec.rb +15 -0
  149. data/spec/reek/cli/options_spec.rb +19 -0
  150. data/spec/reek/cli/warning_collector_spec.rb +28 -0
  151. data/spec/reek/{source/code_comment_spec.rb → code_comment_spec.rb} +19 -17
  152. data/spec/reek/configuration/app_configuration_spec.rb +37 -26
  153. data/spec/reek/configuration/configuration_file_finder_spec.rb +67 -21
  154. data/spec/reek/{core → context}/code_context_spec.rb +18 -21
  155. data/spec/reek/{core → context}/method_context_spec.rb +33 -27
  156. data/spec/reek/{core → context}/module_context_spec.rb +5 -7
  157. data/spec/reek/context/root_context_spec.rb +14 -0
  158. data/spec/reek/context/singleton_method_context_spec.rb +17 -0
  159. data/spec/reek/examiner_spec.rb +9 -50
  160. data/spec/reek/{cli → report}/html_report_spec.rb +6 -9
  161. data/spec/reek/report/json_report_spec.rb +20 -0
  162. data/spec/reek/{cli → report}/text_report_spec.rb +16 -19
  163. data/spec/reek/report/xml_report_spec.rb +34 -0
  164. data/spec/reek/report/yaml_report_spec.rb +20 -0
  165. data/spec/reek/smells/attribute_spec.rb +93 -88
  166. data/spec/reek/smells/behaves_like_variable_detector.rb +1 -1
  167. data/spec/reek/smells/boolean_parameter_spec.rb +31 -5
  168. data/spec/reek/smells/class_variable_spec.rb +10 -10
  169. data/spec/reek/smells/control_parameter_spec.rb +5 -5
  170. data/spec/reek/smells/data_clump_spec.rb +6 -6
  171. data/spec/reek/smells/duplicate_method_call_spec.rb +7 -7
  172. data/spec/reek/smells/feature_envy_spec.rb +12 -13
  173. data/spec/reek/smells/irresponsible_module_spec.rb +28 -32
  174. data/spec/reek/smells/long_parameter_list_spec.rb +7 -7
  175. data/spec/reek/smells/long_yield_list_spec.rb +6 -6
  176. data/spec/reek/smells/module_initialize_spec.rb +4 -4
  177. data/spec/reek/smells/nested_iterators_spec.rb +6 -6
  178. data/spec/reek/smells/nil_check_spec.rb +6 -6
  179. data/spec/reek/smells/prima_donna_method_spec.rb +8 -5
  180. data/spec/reek/smells/repeated_conditional_spec.rb +18 -17
  181. data/spec/reek/{core → smells}/smell_configuration_spec.rb +5 -7
  182. data/spec/reek/smells/smell_detector_shared.rb +6 -7
  183. data/spec/reek/smells/smell_repository_spec.rb +29 -0
  184. data/spec/reek/{smell_warning_spec.rb → smells/smell_warning_spec.rb} +7 -9
  185. data/spec/reek/smells/too_many_instance_variables_spec.rb +5 -5
  186. data/spec/reek/smells/too_many_methods_spec.rb +12 -8
  187. data/spec/reek/smells/too_many_statements_spec.rb +10 -9
  188. data/spec/reek/smells/uncommunicative_method_name_spec.rb +5 -5
  189. data/spec/reek/smells/uncommunicative_module_name_spec.rb +8 -8
  190. data/spec/reek/smells/uncommunicative_parameter_name_spec.rb +18 -6
  191. data/spec/reek/smells/uncommunicative_variable_name_spec.rb +10 -7
  192. data/spec/reek/smells/unused_parameters_spec.rb +4 -4
  193. data/spec/reek/smells/utility_function_spec.rb +65 -39
  194. data/spec/reek/source/source_code_spec.rb +10 -10
  195. data/spec/reek/source/source_locator_spec.rb +30 -0
  196. data/spec/reek/spec/should_reek_of_spec.rb +9 -25
  197. data/spec/reek/spec/should_reek_only_of_spec.rb +4 -7
  198. data/spec/reek/spec/should_reek_spec.rb +4 -32
  199. data/spec/reek/tree_dresser_spec.rb +16 -0
  200. data/spec/reek/{core/tree_walker_spec.rb → tree_walker_spec.rb} +5 -7
  201. data/spec/samples/checkstyle.xml +2 -0
  202. data/spec/samples/configuration/with_excluded_paths.reek +4 -0
  203. data/spec/samples/{overrides/masked/lower.reek → masked_by_dotfile/.reek} +3 -1
  204. data/spec/samples/source_with_exclude_paths/ignore_me/uncommunicative_method_name.rb +5 -0
  205. data/spec/samples/source_with_exclude_paths/nested/ignore_me_as_well/irresponsible_module.rb +2 -0
  206. data/spec/samples/source_with_exclude_paths/nested/uncommunicative_parameter_name.rb +6 -0
  207. data/spec/samples/{ruby20_syntax.rb → unusual_syntax.rb} +8 -0
  208. data/spec/spec_helper.rb +21 -10
  209. data/tasks/develop.rake +2 -2
  210. data/tasks/reek.rake +1 -1
  211. metadata +158 -141
  212. data/features/support/hooks.rb +0 -15
  213. data/lib/reek/cli/report/formatter.rb +0 -69
  214. data/lib/reek/cli/report/heading_formatter.rb +0 -45
  215. data/lib/reek/cli/report/location_formatter.rb +0 -34
  216. data/lib/reek/cli/report/report.rb +0 -131
  217. data/lib/reek/core/tree_walker.rb +0 -180
  218. data/lib/reek/smell_warning.rb +0 -87
  219. data/lib/reek/source/ast_node.rb +0 -38
  220. data/lib/reek/source/code_comment.rb +0 -37
  221. data/lib/reek/source/core_extras.rb +0 -46
  222. data/lib/reek/source/reference_collector.rb +0 -27
  223. data/lib/reek/source/sexp_formatter.rb +0 -22
  224. data/lib/reek/source/sexp_node.rb +0 -79
  225. data/lib/reek/source/source_file.rb +0 -16
  226. data/lib/reek/source/source_repository.rb +0 -45
  227. data/lib/reek/source/tree_dresser.rb +0 -24
  228. data/lib/reek/source.rb +0 -16
  229. data/spec/reek/cli/json_report_spec.rb +0 -20
  230. data/spec/reek/cli/option_interperter_spec.rb +0 -14
  231. data/spec/reek/cli/yaml_report_spec.rb +0 -23
  232. data/spec/reek/core/singleton_method_context_spec.rb +0 -9
  233. data/spec/reek/core/smell_repository_spec.rb +0 -17
  234. data/spec/reek/core/stop_context_spec.rb +0 -17
  235. data/spec/reek/core/warning_collector_spec.rb +0 -30
  236. data/spec/reek/source/object_source_spec.rb +0 -20
  237. data/spec/reek/source/tree_dresser_spec.rb +0 -18
  238. data/spec/samples/config/allow_duplication.reek +0 -3
  239. data/spec/samples/config/deeper_nested_iterators.reek +0 -3
  240. data/spec/samples/configuration_loading/minimal_dirty.rb +0 -4
  241. data/spec/samples/configuration_loading/reek-test-run-disable_smells.reek +0 -7
  242. data/spec/samples/configuration_loading/reek-test-run-enable_smells.reek +0 -7
  243. data/spec/samples/corrupt_config_file/corrupt.reek +0 -1
  244. data/spec/samples/corrupt_config_file/dirty.rb +0 -8
  245. data/spec/samples/demo/demo.rb +0 -8
  246. data/spec/samples/empty_config_file/dirty.rb +0 -8
  247. data/spec/samples/empty_config_file/empty.reek +0 -0
  248. data/spec/samples/inline_config/dirty.rb +0 -16
  249. data/spec/samples/inline_config/masked.reek +0 -7
  250. data/spec/samples/mask_some/dirty.rb +0 -8
  251. data/spec/samples/mask_some/some.reek +0 -8
  252. data/spec/samples/masked/dirty.rb +0 -8
  253. data/spec/samples/masked/masked.reek +0 -5
  254. data/spec/samples/minimal_smelly_and_masked/config.reek +0 -7
  255. data/spec/samples/minimal_smelly_and_masked/minimal_dirty.rb +0 -4
  256. data/spec/samples/mixed_results/clean_one.rb +0 -7
  257. data/spec/samples/mixed_results/clean_three.rb +0 -7
  258. data/spec/samples/mixed_results/clean_two.rb +0 -7
  259. data/spec/samples/mixed_results/dirty_one.rb +0 -8
  260. data/spec/samples/mixed_results/dirty_two.rb +0 -8
  261. data/spec/samples/not_quite_masked/dirty.rb +0 -8
  262. data/spec/samples/not_quite_masked/masked.reek +0 -5
  263. data/spec/samples/not_quite_masked/smelly.rb +0 -3
  264. data/spec/samples/one_smelly_file/dirty.rb +0 -3
  265. data/spec/samples/overrides/masked/dirty.rb +0 -8
  266. data/spec/samples/overrides/upper.reek +0 -5
  267. data/spec/samples/overrides_defaults/camel_case.rb +0 -14
  268. data/spec/samples/overrides_defaults/config.reek +0 -6
  269. data/spec/samples/ruby21_syntax.rb +0 -5
  270. data/spec/samples/standard_smelly/dirty.rb +0 -8
  271. data/spec/samples/standard_smelly/minimal_dirty.rb +0 -4
  272. data/spec/samples/three_smelly_files/dirty_one.rb +0 -3
  273. data/spec/samples/three_smelly_files/dirty_three.rb +0 -5
  274. data/spec/samples/three_smelly_files/dirty_two.rb +0 -4
  275. /data/spec/samples/{simple_configuration.reek → configuration/simple_configuration.reek} +0 -0
@@ -10,4 +10,12 @@ class SomeClass
10
10
  def make_other_symbol_list
11
11
  %I(foo bar baz)
12
12
  end
13
+
14
+ def method_with_required_keyword_arguments(foo:)
15
+ puts foo
16
+ end
17
+
18
+ def method_with_array_decomposition((a, b))
19
+ puts "#{a}, #{b}"
20
+ end
13
21
  end
data/spec/spec_helper.rb CHANGED
@@ -1,12 +1,17 @@
1
- require 'reek/spec'
2
- require 'reek/source/ast_node_class_map'
3
- require 'reek/configuration/app_configuration'
4
-
5
- require 'factory_girl'
6
-
7
- begin
8
- require 'pry-byebug'
9
- rescue LoadError # rubocop:disable Lint/HandleExceptions
1
+ require_relative '../lib/reek/spec'
2
+ require_relative '../lib/reek/ast/ast_node_class_map'
3
+ require_relative '../lib/reek/configuration/app_configuration'
4
+
5
+ Reek::CLI::Silencer.silently do
6
+ require 'factory_girl'
7
+ begin
8
+ require 'pry-byebug'
9
+ rescue LoadError # rubocop:disable Lint/HandleExceptions
10
+ end
11
+ end
12
+ if Gem.loaded_specs['factory_girl'].version > Gem::Version.create('4.5.0')
13
+ raise 'Remove the above silencer as well as this check now that ' \
14
+ '`factory_girl` gem is updated to version greater than 4.5.0!'
10
15
  end
11
16
 
12
17
  FactoryGirl.find_definitions
@@ -31,7 +36,7 @@ module Helpers
31
36
 
32
37
  # :reek:UncommunicativeMethodName
33
38
  def s(type, *children)
34
- @klass_map ||= Reek::Source::AstNodeClassMap.new
39
+ @klass_map ||= Reek::AST::ASTNodeClassMap.new
35
40
  @klass_map.klass_for(type).new(type, children)
36
41
  end
37
42
 
@@ -46,4 +51,10 @@ RSpec.configure do |config|
46
51
  config.run_all_when_everything_filtered = true
47
52
  config.include FactoryGirl::Syntax::Methods
48
53
  config.include Helpers
54
+
55
+ config.disable_monkey_patching!
56
+
57
+ config.mock_with :rspec do |mocks|
58
+ mocks.verify_partial_doubles = true
59
+ end
49
60
  end
data/tasks/develop.rake CHANGED
@@ -1,11 +1,11 @@
1
1
  require 'rake/clean'
2
- require 'reek/core/smell_repository'
2
+ require_relative '../lib/reek/smells/smell_repository'
3
3
 
4
4
  CONFIG_FILE = 'config/defaults.reek'
5
5
 
6
6
  file CONFIG_FILE do
7
7
  config = {}
8
- Reek::Core::SmellRepository.smell_types.each do |klass|
8
+ Reek::Smells::SmellRepository.smell_types.each do |klass|
9
9
  config[klass.name.split(/::/)[-1]] = klass.default_config
10
10
  end
11
11
  $stderr.puts "Creating #{CONFIG_FILE}"
data/tasks/reek.rake CHANGED
@@ -1,4 +1,4 @@
1
- require 'reek/rake/task'
1
+ require_relative '../lib/reek/rake/task'
2
2
 
3
3
  Reek::Rake::Task.new do |t|
4
4
  t.fail_on_error = true
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: 2.0.4
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Rutherford
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-04-07 00:00:00.000000000 Z
13
+ date: 2015-06-30 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: parser
@@ -18,14 +18,28 @@ dependencies:
18
18
  requirements:
19
19
  - - "~>"
20
20
  - !ruby/object:Gem::Version
21
- version: '2.2'
21
+ version: 2.2.2.5
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
26
  - - "~>"
27
27
  - !ruby/object:Gem::Version
28
- version: '2.2'
28
+ version: 2.2.2.5
29
+ - !ruby/object:Gem::Dependency
30
+ name: rainbow
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - "~>"
34
+ - !ruby/object:Gem::Version
35
+ version: '2.0'
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '2.0'
29
43
  - !ruby/object:Gem::Dependency
30
44
  name: unparser
31
45
  requirement: !ruby/object:Gem::Requirement
@@ -41,143 +55,131 @@ dependencies:
41
55
  - !ruby/object:Gem::Version
42
56
  version: 0.2.2
43
57
  - !ruby/object:Gem::Dependency
44
- name: rainbow
58
+ name: activesupport
45
59
  requirement: !ruby/object:Gem::Requirement
46
60
  requirements:
47
61
  - - "~>"
48
62
  - !ruby/object:Gem::Version
49
- version: '2.0'
50
- type: :runtime
63
+ version: '4.2'
64
+ type: :development
51
65
  prerelease: false
52
66
  version_requirements: !ruby/object:Gem::Requirement
53
67
  requirements:
54
68
  - - "~>"
55
69
  - !ruby/object:Gem::Version
56
- version: '2.0'
70
+ version: '4.2'
57
71
  - !ruby/object:Gem::Dependency
58
- name: require_all
72
+ name: aruba
59
73
  requirement: !ruby/object:Gem::Requirement
60
74
  requirements:
61
75
  - - "~>"
62
76
  - !ruby/object:Gem::Version
63
- version: '1.3'
64
- type: :runtime
77
+ version: 0.6.2
78
+ type: :development
65
79
  prerelease: false
66
80
  version_requirements: !ruby/object:Gem::Requirement
67
81
  requirements:
68
82
  - - "~>"
69
83
  - !ruby/object:Gem::Version
70
- version: '1.3'
84
+ version: 0.6.2
71
85
  - !ruby/object:Gem::Dependency
72
- name: bundler
86
+ name: ataru
73
87
  requirement: !ruby/object:Gem::Requirement
74
88
  requirements:
75
89
  - - "~>"
76
90
  - !ruby/object:Gem::Version
77
- version: '1.1'
91
+ version: 0.2.0
78
92
  type: :development
79
93
  prerelease: false
80
94
  version_requirements: !ruby/object:Gem::Requirement
81
95
  requirements:
82
96
  - - "~>"
83
97
  - !ruby/object:Gem::Version
84
- version: '1.1'
98
+ version: 0.2.0
85
99
  - !ruby/object:Gem::Dependency
86
- name: rake
100
+ name: bundler
87
101
  requirement: !ruby/object:Gem::Requirement
88
102
  requirements:
89
103
  - - "~>"
90
104
  - !ruby/object:Gem::Version
91
- version: '10.0'
105
+ version: '1.1'
92
106
  type: :development
93
107
  prerelease: false
94
108
  version_requirements: !ruby/object:Gem::Requirement
95
109
  requirements:
96
110
  - - "~>"
97
111
  - !ruby/object:Gem::Version
98
- version: '10.0'
112
+ version: '1.1'
99
113
  - !ruby/object:Gem::Dependency
100
114
  name: cucumber
101
115
  requirement: !ruby/object:Gem::Requirement
102
116
  requirements:
103
117
  - - "~>"
104
118
  - !ruby/object:Gem::Version
105
- version: '1.3'
106
- - - ">="
107
- - !ruby/object:Gem::Version
108
- version: 1.3.18
119
+ version: '2.0'
109
120
  type: :development
110
121
  prerelease: false
111
122
  version_requirements: !ruby/object:Gem::Requirement
112
123
  requirements:
113
124
  - - "~>"
114
125
  - !ruby/object:Gem::Version
115
- version: '1.3'
116
- - - ">="
117
- - !ruby/object:Gem::Version
118
- version: 1.3.18
126
+ version: '2.0'
119
127
  - !ruby/object:Gem::Dependency
120
- name: rspec
128
+ name: factory_girl
121
129
  requirement: !ruby/object:Gem::Requirement
122
130
  requirements:
123
131
  - - "~>"
124
132
  - !ruby/object:Gem::Version
125
- version: '3.0'
133
+ version: '4.0'
126
134
  type: :development
127
135
  prerelease: false
128
136
  version_requirements: !ruby/object:Gem::Requirement
129
137
  requirements:
130
138
  - - "~>"
131
139
  - !ruby/object:Gem::Version
132
- version: '3.0'
140
+ version: '4.0'
133
141
  - !ruby/object:Gem::Dependency
134
- name: yard
142
+ name: rake
135
143
  requirement: !ruby/object:Gem::Requirement
136
144
  requirements:
137
- - - ">="
138
- - !ruby/object:Gem::Version
139
- version: 0.8.7
140
- - - "<"
145
+ - - "~>"
141
146
  - !ruby/object:Gem::Version
142
- version: '0.9'
147
+ version: '10.0'
143
148
  type: :development
144
149
  prerelease: false
145
150
  version_requirements: !ruby/object:Gem::Requirement
146
151
  requirements:
147
- - - ">="
148
- - !ruby/object:Gem::Version
149
- version: 0.8.7
150
- - - "<"
152
+ - - "~>"
151
153
  - !ruby/object:Gem::Version
152
- version: '0.9'
154
+ version: '10.0'
153
155
  - !ruby/object:Gem::Dependency
154
- name: factory_girl
156
+ name: rspec
155
157
  requirement: !ruby/object:Gem::Requirement
156
158
  requirements:
157
159
  - - "~>"
158
160
  - !ruby/object:Gem::Version
159
- version: '4.0'
161
+ version: '3.0'
160
162
  type: :development
161
163
  prerelease: false
162
164
  version_requirements: !ruby/object:Gem::Requirement
163
165
  requirements:
164
166
  - - "~>"
165
167
  - !ruby/object:Gem::Version
166
- version: '4.0'
168
+ version: '3.0'
167
169
  - !ruby/object:Gem::Dependency
168
170
  name: rubocop
169
171
  requirement: !ruby/object:Gem::Requirement
170
172
  requirements:
171
173
  - - "~>"
172
174
  - !ruby/object:Gem::Version
173
- version: 0.29.0
175
+ version: 0.30.0
174
176
  type: :development
175
177
  prerelease: false
176
178
  version_requirements: !ruby/object:Gem::Requirement
177
179
  requirements:
178
180
  - - "~>"
179
181
  - !ruby/object:Gem::Version
180
- version: 0.29.0
182
+ version: 0.30.0
181
183
  description: |2
182
184
  Reek is a tool that examines Ruby classes, modules and methods and reports
183
185
  any code smells it finds.
@@ -190,14 +192,62 @@ extra_rdoc_files:
190
192
  - CHANGELOG
191
193
  - License.txt
192
194
  files:
195
+ - ".gitignore"
196
+ - ".rubocop.yml"
197
+ - ".travis.yml"
193
198
  - ".yardopts"
194
199
  - CHANGELOG
200
+ - CONTRIBUTING.md
201
+ - Gemfile
195
202
  - License.txt
196
203
  - README.md
197
204
  - Rakefile
198
205
  - assets/html_output.html.erb
199
206
  - bin/reek
207
+ - config/cucumber.yml
200
208
  - config/defaults.reek
209
+ - docs/API.md
210
+ - docs/Attribute.md
211
+ - docs/Basic-Smell-Options.md
212
+ - docs/Boolean-Parameter.md
213
+ - docs/Class-Variable.md
214
+ - docs/Code-Smells.md
215
+ - docs/Command-Line-Options.md
216
+ - docs/Configuration-Files.md
217
+ - docs/Control-Couple.md
218
+ - docs/Control-Parameter.md
219
+ - docs/Data-Clump.md
220
+ - docs/Duplicate-Method-Call.md
221
+ - docs/Feature-Envy.md
222
+ - docs/How-reek-works-internally.md
223
+ - docs/Irresponsible-Module.md
224
+ - docs/Large-Class.md
225
+ - docs/Long-Parameter-List.md
226
+ - docs/Long-Yield-List.md
227
+ - docs/Module-Initialize.md
228
+ - docs/Nested-Iterators.md
229
+ - docs/Nil-Check.md
230
+ - docs/Prima-Donna-Method.md
231
+ - docs/RSpec-matchers.md
232
+ - docs/Rake-Task.md
233
+ - docs/Reek-Driven-Development.md
234
+ - docs/Repeated-Conditional.md
235
+ - docs/Simulated-Polymorphism.md
236
+ - docs/Smell-Suppression.md
237
+ - docs/Too-Many-Instance-Variables.md
238
+ - docs/Too-Many-Methods.md
239
+ - docs/Too-Many-Statements.md
240
+ - docs/Uncommunicative-Method-Name.md
241
+ - docs/Uncommunicative-Module-Name.md
242
+ - docs/Uncommunicative-Name.md
243
+ - docs/Uncommunicative-Parameter-Name.md
244
+ - docs/Uncommunicative-Variable-Name.md
245
+ - docs/Unused-Parameters.md
246
+ - docs/Utility-Function.md
247
+ - docs/Versioning-Policy.md
248
+ - docs/YAML-Reports.md
249
+ - docs/yard_plugin.rb
250
+ - features/command_line_interface/basic_usage.feature
201
251
  - features/command_line_interface/options.feature
202
252
  - features/command_line_interface/smell_selection.feature
203
253
  - features/command_line_interface/smells_count.feature
@@ -205,41 +255,45 @@ files:
205
255
  - features/configuration_files/masking_smells.feature
206
256
  - features/configuration_files/overrides_defaults.feature
207
257
  - features/configuration_loading.feature
258
+ - features/programmatic_access.feature
208
259
  - features/rake_task/rake_task.feature
209
260
  - features/reports/json.feature
210
261
  - features/reports/reports.feature
211
262
  - features/reports/yaml.feature
212
- - features/ruby_api/api.feature
213
263
  - features/samples.feature
264
+ - features/step_definitions/.rubocop.yml
214
265
  - features/step_definitions/reek_steps.rb
266
+ - features/step_definitions/sample_file_steps.rb
215
267
  - features/support/env.rb
216
- - features/support/hooks.rb
217
268
  - lib/reek.rb
269
+ - lib/reek/ast/ast_node_class_map.rb
270
+ - lib/reek/ast/node.rb
271
+ - lib/reek/ast/object_refs.rb
272
+ - lib/reek/ast/reference_collector.rb
273
+ - lib/reek/ast/sexp_extensions.rb
274
+ - lib/reek/ast/sexp_formatter.rb
218
275
  - lib/reek/cli/application.rb
219
276
  - lib/reek/cli/command.rb
220
277
  - lib/reek/cli/input.rb
221
278
  - lib/reek/cli/option_interpreter.rb
222
279
  - lib/reek/cli/options.rb
223
280
  - lib/reek/cli/reek_command.rb
224
- - lib/reek/cli/report/formatter.rb
225
- - lib/reek/cli/report/heading_formatter.rb
226
- - lib/reek/cli/report/location_formatter.rb
227
- - lib/reek/cli/report/report.rb
281
+ - lib/reek/cli/silencer.rb
282
+ - lib/reek/cli/warning_collector.rb
283
+ - lib/reek/code_comment.rb
228
284
  - lib/reek/configuration/app_configuration.rb
229
285
  - lib/reek/configuration/configuration_file_finder.rb
230
- - lib/reek/core/code_context.rb
231
- - lib/reek/core/method_context.rb
232
- - lib/reek/core/module_context.rb
233
- - lib/reek/core/object_refs.rb
234
- - lib/reek/core/singleton_method_context.rb
235
- - lib/reek/core/smell_configuration.rb
236
- - lib/reek/core/smell_repository.rb
237
- - lib/reek/core/stop_context.rb
238
- - lib/reek/core/tree_walker.rb
239
- - lib/reek/core/warning_collector.rb
286
+ - lib/reek/context/code_context.rb
287
+ - lib/reek/context/method_context.rb
288
+ - lib/reek/context/module_context.rb
289
+ - lib/reek/context/root_context.rb
290
+ - lib/reek/context/singleton_method_context.rb
240
291
  - lib/reek/examiner.rb
241
292
  - lib/reek/rake/task.rb
242
- - lib/reek/smell_warning.rb
293
+ - lib/reek/report/formatter.rb
294
+ - lib/reek/report/heading_formatter.rb
295
+ - lib/reek/report/location_formatter.rb
296
+ - lib/reek/report/report.rb
243
297
  - lib/reek/smells.rb
244
298
  - lib/reek/smells/attribute.rb
245
299
  - lib/reek/smells/boolean_parameter.rb
@@ -256,7 +310,10 @@ files:
256
310
  - lib/reek/smells/nil_check.rb
257
311
  - lib/reek/smells/prima_donna_method.rb
258
312
  - lib/reek/smells/repeated_conditional.rb
313
+ - lib/reek/smells/smell_configuration.rb
259
314
  - lib/reek/smells/smell_detector.rb
315
+ - lib/reek/smells/smell_repository.rb
316
+ - lib/reek/smells/smell_warning.rb
260
317
  - lib/reek/smells/too_many_instance_variables.rb
261
318
  - lib/reek/smells/too_many_methods.rb
262
319
  - lib/reek/smells/too_many_statements.rb
@@ -266,49 +323,42 @@ files:
266
323
  - lib/reek/smells/uncommunicative_variable_name.rb
267
324
  - lib/reek/smells/unused_parameters.rb
268
325
  - lib/reek/smells/utility_function.rb
269
- - lib/reek/source.rb
270
- - lib/reek/source/ast_node.rb
271
- - lib/reek/source/ast_node_class_map.rb
272
- - lib/reek/source/code_comment.rb
273
- - lib/reek/source/core_extras.rb
274
- - lib/reek/source/reference_collector.rb
275
- - lib/reek/source/sexp_extensions.rb
276
- - lib/reek/source/sexp_formatter.rb
277
- - lib/reek/source/sexp_node.rb
278
326
  - lib/reek/source/source_code.rb
279
- - lib/reek/source/source_file.rb
280
327
  - lib/reek/source/source_locator.rb
281
- - lib/reek/source/source_repository.rb
282
- - lib/reek/source/tree_dresser.rb
283
328
  - lib/reek/spec.rb
284
329
  - lib/reek/spec/should_reek.rb
285
330
  - lib/reek/spec/should_reek_of.rb
286
331
  - lib/reek/spec/should_reek_only_of.rb
332
+ - lib/reek/tree_dresser.rb
333
+ - lib/reek/tree_walker.rb
287
334
  - lib/reek/version.rb
288
335
  - reek.gemspec
289
336
  - spec/factories/factories.rb
290
337
  - spec/gem/updates_spec.rb
291
338
  - spec/gem/yard_spec.rb
292
339
  - spec/quality/reek_source_spec.rb
293
- - spec/reek/cli/html_report_spec.rb
294
- - spec/reek/cli/json_report_spec.rb
295
- - spec/reek/cli/option_interperter_spec.rb
296
- - spec/reek/cli/text_report_spec.rb
297
- - spec/reek/cli/yaml_report_spec.rb
340
+ - spec/reek/ast/node_spec.rb
341
+ - spec/reek/ast/object_refs_spec.rb
342
+ - spec/reek/ast/reference_collector_spec.rb
343
+ - spec/reek/ast/sexp_extensions_spec.rb
344
+ - spec/reek/ast/sexp_formatter_spec.rb
345
+ - spec/reek/cli/option_interpreter_spec.rb
346
+ - spec/reek/cli/options_spec.rb
347
+ - spec/reek/cli/warning_collector_spec.rb
348
+ - spec/reek/code_comment_spec.rb
298
349
  - spec/reek/configuration/app_configuration_spec.rb
299
350
  - spec/reek/configuration/configuration_file_finder_spec.rb
300
- - spec/reek/core/code_context_spec.rb
301
- - spec/reek/core/method_context_spec.rb
302
- - spec/reek/core/module_context_spec.rb
303
- - spec/reek/core/object_refs_spec.rb
304
- - spec/reek/core/singleton_method_context_spec.rb
305
- - spec/reek/core/smell_configuration_spec.rb
306
- - spec/reek/core/smell_repository_spec.rb
307
- - spec/reek/core/stop_context_spec.rb
308
- - spec/reek/core/tree_walker_spec.rb
309
- - spec/reek/core/warning_collector_spec.rb
351
+ - spec/reek/context/code_context_spec.rb
352
+ - spec/reek/context/method_context_spec.rb
353
+ - spec/reek/context/module_context_spec.rb
354
+ - spec/reek/context/root_context_spec.rb
355
+ - spec/reek/context/singleton_method_context_spec.rb
310
356
  - spec/reek/examiner_spec.rb
311
- - spec/reek/smell_warning_spec.rb
357
+ - spec/reek/report/html_report_spec.rb
358
+ - spec/reek/report/json_report_spec.rb
359
+ - spec/reek/report/text_report_spec.rb
360
+ - spec/reek/report/xml_report_spec.rb
361
+ - spec/reek/report/yaml_report_spec.rb
312
362
  - spec/reek/smells/attribute_spec.rb
313
363
  - spec/reek/smells/behaves_like_variable_detector.rb
314
364
  - spec/reek/smells/boolean_parameter_spec.rb
@@ -325,7 +375,10 @@ files:
325
375
  - spec/reek/smells/nil_check_spec.rb
326
376
  - spec/reek/smells/prima_donna_method_spec.rb
327
377
  - spec/reek/smells/repeated_conditional_spec.rb
378
+ - spec/reek/smells/smell_configuration_spec.rb
328
379
  - spec/reek/smells/smell_detector_shared.rb
380
+ - spec/reek/smells/smell_repository_spec.rb
381
+ - spec/reek/smells/smell_warning_spec.rb
329
382
  - spec/reek/smells/too_many_instance_variables_spec.rb
330
383
  - spec/reek/smells/too_many_methods_spec.rb
331
384
  - spec/reek/smells/too_many_statements_spec.rb
@@ -335,83 +388,47 @@ files:
335
388
  - spec/reek/smells/uncommunicative_variable_name_spec.rb
336
389
  - spec/reek/smells/unused_parameters_spec.rb
337
390
  - spec/reek/smells/utility_function_spec.rb
338
- - spec/reek/source/code_comment_spec.rb
339
- - spec/reek/source/object_source_spec.rb
340
- - spec/reek/source/reference_collector_spec.rb
341
- - spec/reek/source/sexp_extensions_spec.rb
342
- - spec/reek/source/sexp_formatter_spec.rb
343
- - spec/reek/source/sexp_node_spec.rb
344
391
  - spec/reek/source/source_code_spec.rb
345
- - spec/reek/source/tree_dresser_spec.rb
392
+ - spec/reek/source/source_locator_spec.rb
346
393
  - spec/reek/spec/should_reek_of_spec.rb
347
394
  - spec/reek/spec/should_reek_only_of_spec.rb
348
395
  - spec/reek/spec/should_reek_spec.rb
396
+ - spec/reek/tree_dresser_spec.rb
397
+ - spec/reek/tree_walker_spec.rb
349
398
  - spec/samples/all_but_one_masked/clean_one.rb
350
399
  - spec/samples/all_but_one_masked/dirty.rb
351
400
  - spec/samples/all_but_one_masked/masked.reek
401
+ - spec/samples/checkstyle.xml
352
402
  - spec/samples/clean_due_to_masking/clean_one.rb
353
403
  - spec/samples/clean_due_to_masking/clean_three.rb
354
404
  - spec/samples/clean_due_to_masking/clean_two.rb
355
405
  - spec/samples/clean_due_to_masking/dirty_one.rb
356
406
  - spec/samples/clean_due_to_masking/dirty_two.rb
357
407
  - spec/samples/clean_due_to_masking/masked.reek
358
- - spec/samples/config/allow_duplication.reek
359
- - spec/samples/config/deeper_nested_iterators.reek
360
- - spec/samples/configuration_loading/minimal_dirty.rb
361
- - spec/samples/configuration_loading/reek-test-run-disable_smells.reek
362
- - spec/samples/configuration_loading/reek-test-run-enable_smells.reek
363
- - spec/samples/corrupt_config_file/corrupt.reek
364
- - spec/samples/corrupt_config_file/dirty.rb
365
- - spec/samples/demo/demo.rb
366
- - spec/samples/empty_config_file/dirty.rb
367
- - spec/samples/empty_config_file/empty.reek
408
+ - spec/samples/configuration/simple_configuration.reek
409
+ - spec/samples/configuration/with_excluded_paths.reek
368
410
  - spec/samples/exceptions.reek
369
411
  - spec/samples/inline.rb
370
- - spec/samples/inline_config/dirty.rb
371
- - spec/samples/inline_config/masked.reek
372
- - spec/samples/mask_some/dirty.rb
373
- - spec/samples/mask_some/some.reek
374
- - spec/samples/masked/dirty.rb
375
- - spec/samples/masked/masked.reek
412
+ - spec/samples/masked_by_dotfile/.reek
376
413
  - spec/samples/masked_by_dotfile/dirty.rb
377
- - spec/samples/minimal_smelly_and_masked/config.reek
378
- - spec/samples/minimal_smelly_and_masked/minimal_dirty.rb
379
- - spec/samples/mixed_results/clean_one.rb
380
- - spec/samples/mixed_results/clean_three.rb
381
- - spec/samples/mixed_results/clean_two.rb
382
- - spec/samples/mixed_results/dirty_one.rb
383
- - spec/samples/mixed_results/dirty_two.rb
384
414
  - spec/samples/no_config_file/dirty.rb
385
- - spec/samples/not_quite_masked/dirty.rb
386
- - spec/samples/not_quite_masked/masked.reek
387
- - spec/samples/not_quite_masked/smelly.rb
388
- - spec/samples/one_smelly_file/dirty.rb
389
415
  - spec/samples/optparse.rb
390
- - spec/samples/overrides/masked/dirty.rb
391
- - spec/samples/overrides/masked/lower.reek
392
- - spec/samples/overrides/upper.reek
393
- - spec/samples/overrides_defaults/camel_case.rb
394
- - spec/samples/overrides_defaults/config.reek
395
416
  - spec/samples/redcloth.rb
396
- - spec/samples/ruby20_syntax.rb
397
- - spec/samples/ruby21_syntax.rb
398
- - spec/samples/simple_configuration.reek
399
- - spec/samples/standard_smelly/dirty.rb
400
- - spec/samples/standard_smelly/minimal_dirty.rb
417
+ - spec/samples/source_with_exclude_paths/ignore_me/uncommunicative_method_name.rb
418
+ - spec/samples/source_with_exclude_paths/nested/ignore_me_as_well/irresponsible_module.rb
419
+ - spec/samples/source_with_exclude_paths/nested/uncommunicative_parameter_name.rb
401
420
  - spec/samples/three_clean_files/clean_one.rb
402
421
  - spec/samples/three_clean_files/clean_three.rb
403
422
  - spec/samples/three_clean_files/clean_two.rb
404
- - spec/samples/three_smelly_files/dirty_one.rb
405
- - spec/samples/three_smelly_files/dirty_three.rb
406
- - spec/samples/three_smelly_files/dirty_two.rb
407
423
  - spec/samples/two_smelly_files/dirty_one.rb
408
424
  - spec/samples/two_smelly_files/dirty_two.rb
425
+ - spec/samples/unusual_syntax.rb
409
426
  - spec/spec_helper.rb
410
427
  - tasks/develop.rake
411
428
  - tasks/reek.rake
412
429
  - tasks/rubocop.rake
413
430
  - tasks/test.rake
414
- homepage: https://wiki.github.com/troessner/reek
431
+ homepage: https://github.com/troessner/reek/wiki
415
432
  licenses:
416
433
  - MIT
417
434
  metadata: {}
@@ -427,15 +444,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
427
444
  requirements:
428
445
  - - ">="
429
446
  - !ruby/object:Gem::Version
430
- version: 1.9.3
447
+ version: 2.0.0
431
448
  required_rubygems_version: !ruby/object:Gem::Requirement
432
449
  requirements:
433
450
  - - ">="
434
451
  - !ruby/object:Gem::Version
435
452
  version: '0'
436
453
  requirements: []
437
- rubyforge_project: reek
438
- rubygems_version: 2.4.4
454
+ rubyforge_project:
455
+ rubygems_version: 2.4.5
439
456
  signing_key:
440
457
  specification_version: 4
441
458
  summary: Code smell detector for Ruby
@@ -1,15 +0,0 @@
1
- After('@remove-disable-smell-config-from-current-dir') do
2
- Pathname.pwd.join('reek-test-run-disable_smells.reek').delete
3
- end
4
-
5
- After('@remove-disable-smell-config-from-parent-dir') do
6
- Pathname.pwd.parent.join('reek-test-run-disable_smells.reek').delete
7
- end
8
-
9
- After('@remove-disable-smell-config-from-home-dir') do
10
- Pathname.new(Dir.home).join('reek-test-run-disable_smells.reek').delete
11
- end
12
-
13
- After('@remove-enable-smell-config-from-current-dir') do
14
- Pathname.pwd.join('reek-test-run-enable_smells.reek').delete
15
- end