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,22 +0,0 @@
1
- require_relative '../../../spec_helper'
2
- require_lib 'reek/report/code_climate/code_climate_configuration'
3
-
4
- RSpec.describe Reek::Report::CodeClimateConfiguration do
5
- yml = described_class.load
6
- smell_types = Reek::SmellDetectors::BaseDetector.descendants.map(&:smell_type)
7
-
8
- smell_types.each do |name|
9
- config = yml.fetch(name)
10
- it "provides remediation_points for #{name}" do
11
- expect(config['remediation_points']).to be_a Integer
12
- end
13
-
14
- it "provides content for #{name}" do
15
- expect(config['content']).to be_a String
16
- end
17
- end
18
-
19
- it 'does not include extraneous configuration' do
20
- expect(smell_types).to match_array(yml.keys)
21
- end
22
- end
@@ -1,126 +0,0 @@
1
- require_relative '../../../spec_helper'
2
- require_lib 'reek/report/code_climate/code_climate_fingerprint'
3
-
4
- RSpec.describe Reek::Report::CodeClimateFingerprint do
5
- describe '#compute' do
6
- let(:computed) { described_class.new(warning).compute }
7
-
8
- context 'when fingerprinting a warning with no parameters' do
9
- let(:expected_fingerprint) { 'e68badd29db51c92363a7c6a2438d722' }
10
- let(:warning) do
11
- Reek::SmellWarning.new(
12
- 'UtilityFunction',
13
- context: 'alfa',
14
- message: "doesn't depend on instance state (maybe move it to another class?)",
15
- lines: lines,
16
- source: 'a/ruby/source/file.rb')
17
- end
18
-
19
- context 'with code at a specific location' do
20
- let(:lines) { [1] }
21
-
22
- it 'computes the fingerprint' do
23
- expect(computed).to eq expected_fingerprint
24
- end
25
- end
26
-
27
- context 'with code at a different location' do
28
- let(:lines) { [5] }
29
-
30
- it 'computes the same fingerprint' do
31
- expect(computed).to eq expected_fingerprint
32
- end
33
- end
34
- end
35
-
36
- context 'when the fingerprint should not be computed' do
37
- let(:warning) do
38
- Reek::SmellWarning.new(
39
- 'ManualDispatch',
40
- context: 'Alfa#bravo',
41
- message: 'manually dispatches method call',
42
- lines: [4],
43
- source: 'a/ruby/source/file.rb')
44
- end
45
-
46
- it 'returns nil' do
47
- expect(computed).to be_nil
48
- end
49
- end
50
-
51
- context 'when the smell warning has only identifying parameters' do
52
- let(:warning) do
53
- Reek::SmellWarning.new(
54
- 'ClassVariable',
55
- context: 'Alfa',
56
- message: "declares the class variable '@@#{name}'",
57
- lines: [4],
58
- parameters: { name: "@@#{name}" },
59
- source: 'a/ruby/source/file.rb')
60
- end
61
-
62
- context 'when the name is one thing' do
63
- let(:name) { 'bravo' }
64
- let(:expected_fingerprint) { '9c3fd378178118a67e9509f87cae24f9' }
65
-
66
- it 'computes the fingerprint' do
67
- expect(computed).to eq expected_fingerprint
68
- end
69
- end
70
-
71
- context 'when the name is another thing' do
72
- let(:name) { 'echo' }
73
- let(:expected_fingerprint) { 'd2a6d2703ce04cca65e7300b7de4b89f' }
74
-
75
- it 'computes another fingerprint' do
76
- expect(computed).to eq expected_fingerprint
77
- end
78
- end
79
- end
80
-
81
- context 'when the smell warning has identifying and non-identifying parameters' do
82
- let(:warning) do
83
- Reek::SmellWarning.new(
84
- 'DuplicateMethodCall',
85
- context: "Alfa##{name}",
86
- message: "calls '#{name}' #{count} times",
87
- lines: lines,
88
- parameters: { name: "@@#{name}", count: count },
89
- source: 'a/ruby/source/file.rb')
90
- end
91
-
92
- context 'when the parameters are provided' do
93
- let(:name) { 'bravo' }
94
- let(:count) { 5 }
95
- let(:lines) { [1, 7, 10, 13, 15] }
96
- let(:expected_fingerprint) { '238733f4f51ba5473dcbe94a43ec5400' }
97
-
98
- it 'computes the fingerprint' do
99
- expect(computed).to eq expected_fingerprint
100
- end
101
- end
102
-
103
- context 'when the non-identifying parameters change' do
104
- let(:name) { 'bravo' }
105
- let(:count) { 9 }
106
- let(:lines) { [1, 7, 10, 13, 15, 17, 19, 20, 25] }
107
- let(:expected_fingerprint) { '238733f4f51ba5473dcbe94a43ec5400' }
108
-
109
- it 'computes the same fingerprint' do
110
- expect(computed).to eq expected_fingerprint
111
- end
112
- end
113
-
114
- context 'when the identifying parameters change' do
115
- let(:name) { 'echo' }
116
- let(:count) { 5 }
117
- let(:lines) { [1, 7, 10, 13, 15] }
118
- let(:expected_fingerprint) { 'e0c35e9223cc19bdb9a04fb3e60573e1' }
119
-
120
- it 'computes a different fingerprint' do
121
- expect(computed).to eq expected_fingerprint
122
- end
123
- end
124
- end
125
- end
126
- end
@@ -1,51 +0,0 @@
1
- require_relative '../../../spec_helper'
2
- require_lib 'reek/report/code_climate/code_climate_formatter'
3
-
4
- RSpec.describe Reek::Report::CodeClimateFormatter do
5
- describe '#render' do
6
- let(:warning) do
7
- Reek::SmellWarning.new(
8
- 'UtilityFunction',
9
- context: 'context foo',
10
- message: 'message bar',
11
- lines: [1, 2],
12
- source: 'a/ruby/source/file.rb')
13
- end
14
- let(:rendered) { described_class.new(warning).render }
15
- let(:json) { JSON.parse rendered.chop }
16
-
17
- it "sets the type as 'issue'" do
18
- expect(json['type']).to eq 'issue'
19
- end
20
-
21
- it 'sets the category' do
22
- expect(json['categories']).to eq ['Complexity']
23
- end
24
-
25
- it 'constructs a description based on the context and message' do
26
- expect(json['description']).to eq 'context foo message bar'
27
- end
28
-
29
- it 'sets a check name based on the smell detector' do
30
- expect(json['check_name']).to eq 'UtilityFunction'
31
- end
32
-
33
- it 'sets the location' do
34
- expect(json['location']).to eq('path' => 'a/ruby/source/file.rb',
35
- 'lines' => { 'begin' => 1, 'end' => 2 })
36
- end
37
-
38
- it 'sets a content based on the smell detector' do
39
- expect(json['content']['body']).
40
- to eq "A _Utility Function_ is any instance method that has no dependency on the state of the instance.\n"
41
- end
42
-
43
- it 'sets remediation points based on the smell detector' do
44
- expect(json['remediation_points']).to eq 250_000
45
- end
46
-
47
- it 'sets fingerprint based on warning context' do
48
- expect(json['fingerprint']).to eq '70c530e45999af129d520f1f579f967f'
49
- end
50
- end
51
- end
@@ -1,56 +0,0 @@
1
- require_relative '../../../spec_helper'
2
- require_lib 'reek/examiner'
3
- require_lib 'reek/report/code_climate'
4
-
5
- require 'json'
6
- require 'stringio'
7
-
8
- RSpec.describe Reek::Report::CodeClimateReport do
9
- let(:options) { {} }
10
- let(:instance) { described_class.new(**options) }
11
- let(:examiner) { Reek::Examiner.new(source) }
12
-
13
- before do
14
- instance.add_examiner examiner
15
- end
16
-
17
- context 'with empty source' do
18
- let(:source) { '' }
19
-
20
- it 'prints an empty string' do
21
- expect { instance.show }.to output('').to_stdout
22
- end
23
- end
24
-
25
- context 'with smelly source' do
26
- let(:source) { 'def simple(a) a[3] end' }
27
-
28
- it 'prints smells as json' do
29
- expected = <<~HERE.delete("\n")
30
- {"type":"issue",
31
- "check_name":"UncommunicativeParameterName",
32
- "description":"simple has the parameter name 'a'",
33
- "categories":["Complexity"],
34
- "location":{"path":"string","lines":{"begin":1,"end":1}},
35
- "remediation_points":150000,
36
- "content":{"body":"An `Uncommunicative Parameter Name` is a parameter name that
37
- doesn't communicate its intent well enough.\\n\\nPoor names make it hard for the reader
38
- to build a mental picture of what's going on in the code. They can also be
39
- mis-interpreted; and they hurt the flow of reading, because the reader must slow down
40
- to interpret the names.\\n"},
41
- "fingerprint":"09970037d92b5a628bf682a3e2bb126d"}\u0000
42
- {"type":"issue",
43
- "check_name":"UtilityFunction",
44
- "description":"simple doesn't depend on instance state (maybe move it to another class?)",
45
- "categories":["Complexity"],
46
- "location":{"path":"string","lines":{"begin":1,"end":1}},
47
- "remediation_points":250000,
48
- "content":{"body":"A _Utility Function_ is any instance method that has no
49
- dependency on the state of the instance.\\n"},
50
- "fingerprint":"db456db7cb344bb5a98b8fc54a2f382e"}\u0000
51
- HERE
52
-
53
- expect { instance.show }.to output(expected).to_stdout
54
- end
55
- end
56
- end
@@ -1,19 +0,0 @@
1
- require_relative '../../spec_helper'
2
- require_lib 'reek/examiner'
3
- require_lib 'reek/report/html_report'
4
-
5
- RSpec.describe Reek::Report::HTMLReport do
6
- let(:instance) { described_class.new }
7
-
8
- context 'with an empty source' do
9
- let(:examiner) { Reek::Examiner.new('') }
10
-
11
- before do
12
- instance.add_examiner examiner
13
- end
14
-
15
- it 'has the text 0 total warnings' do
16
- expect { instance.show }.to output(/0 total warnings/).to_stdout
17
- end
18
- end
19
- end
@@ -1,58 +0,0 @@
1
- require_relative '../../spec_helper'
2
- require_lib 'reek/examiner'
3
- require_lib 'reek/report/json_report'
4
-
5
- require 'json'
6
- require 'stringio'
7
-
8
- RSpec.describe Reek::Report::JSONReport do
9
- let(:options) { {} }
10
- let(:instance) { described_class.new(**options) }
11
- let(:examiner) { Reek::Examiner.new(source) }
12
-
13
- before do
14
- instance.add_examiner examiner
15
- end
16
-
17
- context 'with empty source' do
18
- let(:source) { '' }
19
-
20
- it 'prints empty json' do
21
- expect { instance.show }.to output(/^\[\]$/).to_stdout
22
- end
23
- end
24
-
25
- context 'with smelly source' do
26
- let(:source) { 'def simple(a) a[3] end' }
27
-
28
- it 'prints smells as json' do
29
- out = StringIO.new
30
- instance.show(out)
31
- out.rewind
32
- result = JSON.parse(out.read)
33
- expected = JSON.parse <<-RUBY
34
- [
35
- {
36
- "context": "simple",
37
- "lines": [1],
38
- "message": "has the parameter name 'a'",
39
- "smell_type": "UncommunicativeParameterName",
40
- "source": "string",
41
- "name": "a",
42
- "documentation_link": "https://github.com/troessner/reek/blob/v#{Reek::Version::STRING}/docs/Uncommunicative-Parameter-Name.md"
43
- },
44
- {
45
- "context": "simple",
46
- "lines": [1],
47
- "message": "doesn't depend on instance state (maybe move it to another class?)",
48
- "smell_type": "UtilityFunction",
49
- "source": "string",
50
- "documentation_link": "https://github.com/troessner/reek/blob/v#{Reek::Version::STRING}/docs/Utility-Function.md"
51
- }
52
- ]
53
- RUBY
54
-
55
- expect(result).to eq expected
56
- end
57
- end
58
- end
@@ -1,32 +0,0 @@
1
- require_relative '../../spec_helper'
2
- require_lib 'reek/report/location_formatter'
3
-
4
- RSpec.describe Reek::Report::BlankLocationFormatter do
5
- let(:warning) { build_smell_warning(lines: [11, 9, 250, 100]) }
6
-
7
- describe '.format' do
8
- it 'returns a blank String regardless of the warning' do
9
- expect(described_class.format(warning)).to eq('')
10
- end
11
- end
12
- end
13
-
14
- RSpec.describe Reek::Report::DefaultLocationFormatter do
15
- let(:warning) { build_smell_warning(lines: [11, 9, 250, 100]) }
16
-
17
- describe '.format' do
18
- it 'returns a prefix with sorted line numbers' do
19
- expect(described_class.format(warning)).to eq('[9, 11, 100, 250]:')
20
- end
21
- end
22
- end
23
-
24
- RSpec.describe Reek::Report::SingleLineLocationFormatter do
25
- let(:warning) { build_smell_warning(lines: [11, 9, 250, 100]) }
26
-
27
- describe '.format' do
28
- it 'returns the first line where the smell was found' do
29
- expect(described_class.format(warning)).to eq('dummy_file:9: ')
30
- end
31
- end
32
- end
@@ -1,68 +0,0 @@
1
- require_relative '../../spec_helper'
2
- require_lib 'reek/report/progress_formatter'
3
-
4
- RSpec.describe Reek::Report::ProgressFormatter::Dots do
5
- let(:sources_count) { 23 }
6
- let(:formatter) { described_class.new(sources_count) }
7
-
8
- describe '#header' do
9
- it 'announces the number of files to be inspected' do
10
- expect(formatter.header).to eq "Inspecting 23 file(s):\n"
11
- end
12
- end
13
-
14
- describe '#progress' do
15
- let(:clean_examiner) { instance_double(Reek::Examiner, smelly?: false) }
16
- let(:smelly_examiner) { instance_double(Reek::Examiner, smelly?: true) }
17
-
18
- context 'with colors disabled' do
19
- before do
20
- Rainbow.enabled = false
21
- end
22
-
23
- it 'returns a dot for clean files' do
24
- expect(formatter.progress(clean_examiner)).to eq '.'
25
- end
26
-
27
- it 'returns an S for smelly files' do
28
- expect(formatter.progress(smelly_examiner)).to eq 'S'
29
- end
30
- end
31
- end
32
-
33
- describe '#footer' do
34
- it 'returns some blank lines to offset the output' do
35
- expect(formatter.footer).to eq "\n\n"
36
- end
37
- end
38
- end
39
-
40
- RSpec.describe Reek::Report::ProgressFormatter::Quiet do
41
- let(:sources_count) { 23 }
42
- let(:formatter) { described_class.new(sources_count) }
43
-
44
- describe '#header' do
45
- it 'is quiet' do
46
- expect(formatter.header).to eq ''
47
- end
48
- end
49
-
50
- describe '#progress' do
51
- let(:clean_examiner) { instance_double(Reek::Examiner, smelly?: false) }
52
- let(:smelly_examiner) { instance_double(Reek::Examiner, smelly?: true) }
53
-
54
- it 'is quiet for clean files' do
55
- expect(formatter.progress(clean_examiner)).to eq ''
56
- end
57
-
58
- it 'is quiet for smelly files' do
59
- expect(formatter.progress(smelly_examiner)).to eq ''
60
- end
61
- end
62
-
63
- describe '#footer' do
64
- it 'is quiet' do
65
- expect(formatter.footer).to eq ''
66
- end
67
- end
68
- end
@@ -1,89 +0,0 @@
1
- require_relative '../../spec_helper'
2
- require_lib 'reek/examiner'
3
- require_lib 'reek/report/text_report'
4
- require_lib 'reek/report/heading_formatter'
5
- require_lib 'reek/report/simple_warning_formatter'
6
- require 'rainbow'
7
-
8
- RSpec.describe Reek::Report::TextReport do
9
- let(:instance) { described_class.new }
10
-
11
- context 'with a single empty source' do
12
- before do
13
- instance.add_examiner Reek::Examiner.new('')
14
- end
15
-
16
- it 'has an empty quiet_report' do
17
- expect { instance.show }.not_to output.to_stdout
18
- end
19
- end
20
-
21
- context 'with non smelly files' do
22
- before do
23
- instance.add_examiner(Reek::Examiner.new('def simple() puts "a" end'))
24
- instance.add_examiner(Reek::Examiner.new('def simple() puts "a" end'))
25
- end
26
-
27
- context 'with colors disabled' do
28
- before do
29
- Rainbow.enabled = false
30
- end
31
-
32
- it 'shows total of 0 warnings' do
33
- expect { instance.show }.to output(/0 total warnings\n\Z/).to_stdout
34
- end
35
- end
36
-
37
- context 'with colors enabled' do
38
- before do
39
- Rainbow.enabled = true
40
- end
41
-
42
- it 'has a footer in color' do
43
- expect { instance.show }.to output(/\e\[32m0 total warnings\n\e\[0m\Z/).to_stdout
44
- end
45
- end
46
- end
47
-
48
- context 'with a couple of smells' do
49
- before do
50
- instance.add_examiner(Reek::Examiner.new('def simple(a) a[3] end'))
51
- instance.add_examiner(Reek::Examiner.new('def simple(a) a[3] end'))
52
- end
53
-
54
- context 'with colors disabled' do
55
- before do
56
- Rainbow.enabled = false
57
- end
58
-
59
- it 'has a heading' do
60
- expect { instance.show }.to output(/string -- 2 warnings/).to_stdout
61
- end
62
-
63
- it 'mentions every smell name' do
64
- matcher = match(/UncommunicativeParameterName/).and match(/UtilityFunction/)
65
- expect { instance.show }.to output(matcher).to_stdout
66
- end
67
-
68
- it 'shows total number of warnings' do
69
- expect { instance.show }.to output(/4 total warnings\n\Z/).to_stdout
70
- end
71
- end
72
-
73
- context 'with colors enabled' do
74
- before do
75
- Rainbow.enabled = true
76
- end
77
-
78
- it 'has a header in color' do
79
- expect { instance.show }.
80
- to output(/\A\e\[36mstring -- \e\[0m\e\[33m2 warning\e\[0m\e\[33ms\e\[0m/).to_stdout
81
- end
82
-
83
- it 'shows total number of warnings in color' do
84
- expect { instance.show }.
85
- to output(/\e\[31m4 total warnings\n\e\[0m\Z/).to_stdout
86
- end
87
- end
88
- end
89
- end