reek 6.0.2 → 6.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/dependabot.yml +13 -0
- data/.github/workflows/ruby.yml +57 -0
- data/.rubocop.yml +6 -12
- data/.rubocop_todo.yml +6 -4
- data/CHANGELOG.md +95 -0
- data/CONTRIBUTING.md +10 -10
- data/Dockerfile +1 -1
- data/Gemfile +8 -7
- data/README.md +29 -29
- data/bin/code_climate_reek +56 -8
- data/lib/reek/ast/ast_node_class_map.rb +1 -1
- data/lib/reek/ast/node.rb +1 -1
- data/lib/reek/ast/sexp_extensions/arguments.rb +20 -0
- data/lib/reek/ast/sexp_extensions/case.rb +1 -1
- data/lib/reek/ast/sexp_extensions/if.rb +1 -1
- data/lib/reek/ast/sexp_extensions/send.rb +22 -7
- data/lib/reek/cli/command/todo_list_command.rb +3 -3
- data/lib/reek/cli/options.rb +6 -6
- data/lib/reek/{report/code_climate → code_climate}/code_climate_configuration.rb +1 -1
- data/lib/reek/{report/code_climate → code_climate}/code_climate_configuration.yml +41 -41
- data/lib/reek/{report/code_climate → code_climate}/code_climate_fingerprint.rb +2 -2
- data/lib/reek/{report/code_climate → code_climate}/code_climate_formatter.rb +2 -4
- data/lib/reek/{report/code_climate → code_climate}/code_climate_report.rb +3 -3
- data/lib/reek/code_comment.rb +25 -20
- data/lib/reek/configuration/app_configuration.rb +5 -5
- data/lib/reek/configuration/configuration_converter.rb +1 -1
- data/lib/reek/configuration/configuration_file_finder.rb +5 -4
- data/lib/reek/configuration/default_directive.rb +1 -1
- data/lib/reek/configuration/directory_directives.rb +1 -1
- data/lib/reek/configuration/excluded_paths.rb +3 -2
- data/lib/reek/configuration/schema.rb +177 -0
- data/lib/reek/configuration/schema_validator.rb +12 -13
- data/lib/reek/context/attribute_context.rb +1 -1
- data/lib/reek/context/code_context.rb +1 -1
- data/lib/reek/context/method_context.rb +1 -1
- data/lib/reek/context/module_context.rb +4 -0
- data/lib/reek/context/refinement_context.rb +16 -0
- data/lib/reek/context/send_context.rb +7 -1
- data/lib/reek/context_builder.rb +17 -3
- data/lib/reek/documentation_link.rb +3 -5
- data/lib/reek/errors/bad_detector_configuration_key_in_comment_error.rb +2 -2
- data/lib/reek/errors/bad_detector_in_comment_error.rb +2 -2
- data/lib/reek/errors/encoding_error.rb +1 -1
- data/lib/reek/errors/garbage_detector_configuration_in_comment_error.rb +2 -2
- data/lib/reek/errors/incomprehensible_source_error.rb +1 -1
- data/lib/reek/errors/legacy_comment_separator_error.rb +2 -2
- data/lib/reek/errors/syntax_error.rb +1 -1
- data/lib/reek/rake/task.rb +5 -5
- data/lib/reek/smell_detectors/base_detector.rb +1 -1
- data/lib/reek/smell_detectors/class_variable.rb +2 -2
- data/lib/reek/smell_detectors/control_parameter_helpers/candidate.rb +6 -6
- data/lib/reek/smell_detectors/control_parameter_helpers/control_parameter_finder.rb +1 -1
- data/lib/reek/smell_detectors/duplicate_method_call.rb +5 -5
- data/lib/reek/smell_detectors/instance_variable_assumption.rb +8 -8
- data/lib/reek/smell_detectors/nested_iterators.rb +4 -3
- data/lib/reek/smell_detectors/unused_private_method.rb +3 -2
- data/lib/reek/smell_warning.rb +1 -1
- data/lib/reek/source/source_locator.rb +1 -3
- data/lib/reek/spec/should_reek_of.rb +11 -9
- data/lib/reek/spec.rb +1 -1
- data/lib/reek/version.rb +2 -2
- data/reek.gemspec +29 -25
- metadata +37 -250
- data/.travis.yml +0 -40
- data/docs/API.md +0 -174
- data/docs/Attribute.md +0 -39
- data/docs/Basic-Smell-Options.md +0 -85
- data/docs/Boolean-Parameter.md +0 -54
- data/docs/Class-Variable.md +0 -40
- data/docs/Code-Smells.md +0 -39
- data/docs/Command-Line-Options.md +0 -119
- data/docs/Control-Couple.md +0 -26
- data/docs/Control-Parameter.md +0 -32
- data/docs/Data-Clump.md +0 -46
- data/docs/Duplicate-Method-Call.md +0 -264
- data/docs/Feature-Envy.md +0 -93
- data/docs/How-To-Write-New-Detectors.md +0 -132
- data/docs/How-reek-works-internally.md +0 -114
- data/docs/Instance-Variable-Assumption.md +0 -163
- data/docs/Irresponsible-Module.md +0 -47
- data/docs/Large-Class.md +0 -16
- data/docs/Long-Parameter-List.md +0 -39
- data/docs/Long-Yield-List.md +0 -37
- data/docs/Manual-Dispatch.md +0 -30
- data/docs/Missing-Safe-Method.md +0 -92
- data/docs/Module-Initialize.md +0 -62
- data/docs/Nested-Iterators.md +0 -59
- data/docs/Nil-Check.md +0 -47
- data/docs/RSpec-matchers.md +0 -129
- data/docs/Rake-Task.md +0 -66
- data/docs/Reek-4-to-Reek-5-migration.md +0 -188
- data/docs/Reek-Driven-Development.md +0 -46
- data/docs/Repeated-Conditional.md +0 -47
- data/docs/Simulated-Polymorphism.md +0 -16
- data/docs/Smell-Suppression.md +0 -96
- data/docs/Style-Guide.md +0 -19
- data/docs/Subclassed-From-Core-Class.md +0 -79
- data/docs/Too-Many-Constants.md +0 -37
- data/docs/Too-Many-Instance-Variables.md +0 -43
- data/docs/Too-Many-Methods.md +0 -56
- data/docs/Too-Many-Statements.md +0 -54
- data/docs/Uncommunicative-Method-Name.md +0 -94
- data/docs/Uncommunicative-Module-Name.md +0 -92
- data/docs/Uncommunicative-Name.md +0 -18
- data/docs/Uncommunicative-Parameter-Name.md +0 -90
- data/docs/Uncommunicative-Variable-Name.md +0 -96
- data/docs/Unused-Parameters.md +0 -28
- data/docs/Unused-Private-Method.md +0 -101
- data/docs/Utility-Function.md +0 -56
- data/docs/Versioning-Policy.md +0 -7
- data/docs/YAML-Reports.md +0 -93
- data/docs/defaults.reek.yml +0 -129
- data/docs/templates/default/docstring/html/public_api_marker.erb +0 -3
- data/docs/templates/default/docstring/setup.rb +0 -37
- data/docs/templates/default/fulldoc/html/css/common.css +0 -1
- data/docs/yard_plugin.rb +0 -17
- data/features/command_line_interface/basic_usage.feature +0 -15
- data/features/command_line_interface/options.feature +0 -123
- data/features/command_line_interface/show_progress.feature +0 -33
- data/features/command_line_interface/smell_selection.feature +0 -15
- data/features/command_line_interface/smells_count.feature +0 -38
- data/features/command_line_interface/stdin.feature +0 -65
- data/features/configuration_files/accept_setting.feature +0 -87
- data/features/configuration_files/directory_specific_directives.feature +0 -274
- data/features/configuration_files/exclude_directives.feature +0 -35
- data/features/configuration_files/exclude_paths_directives.feature +0 -42
- data/features/configuration_files/masking_smells.feature +0 -94
- data/features/configuration_files/mix_accept_reject_setting.feature +0 -84
- data/features/configuration_files/reject_setting.feature +0 -89
- data/features/configuration_files/schema_validation.feature +0 -59
- data/features/configuration_files/show_configuration_file.feature +0 -44
- data/features/configuration_files/unused_private_method.feature +0 -68
- data/features/configuration_loading.feature +0 -91
- data/features/configuration_via_source_comments/erroneous_source_comments.feature +0 -68
- data/features/configuration_via_source_comments/well_formed_source_comments.feature +0 -116
- data/features/locales.feature +0 -32
- data/features/programmatic_access.feature +0 -41
- data/features/rake_task/rake_task.feature +0 -138
- data/features/reports/codeclimate.feature +0 -59
- data/features/reports/json.feature +0 -59
- data/features/reports/reports.feature +0 -219
- data/features/reports/yaml.feature +0 -52
- data/features/rspec_matcher.feature +0 -41
- data/features/samples.feature +0 -305
- data/features/step_definitions/.rubocop.yml +0 -5
- data/features/step_definitions/reek_steps.rb +0 -102
- data/features/step_definitions/sample_file_steps.rb +0 -63
- data/features/support/env.rb +0 -33
- data/features/todo_list.feature +0 -108
- data/lib/reek/configuration/schema.yml +0 -210
- data/samples/checkstyle.xml +0 -7
- data/samples/clean_source/clean.rb +0 -6
- data/samples/configuration/accepts_rejects_and_excludes_for_detectors.reek.yml +0 -29
- data/samples/configuration/accepts_rejects_and_excludes_for_directory_directives.reek.yml +0 -30
- data/samples/configuration/corrupt.reek +0 -1
- data/samples/configuration/empty.reek +0 -0
- data/samples/configuration/full_configuration.reek +0 -13
- data/samples/configuration/full_mask.reek +0 -6
- data/samples/configuration/home/home.reek.yml +0 -4
- data/samples/configuration/partial_mask.reek +0 -4
- data/samples/configuration/regular_configuration/.reek.yml +0 -4
- data/samples/configuration/regular_configuration/empty_sub_directory/.gitignore +0 -0
- data/samples/configuration/with_excluded_paths.reek +0 -5
- data/samples/no_config_file/.keep +0 -0
- data/samples/paths.rb +0 -5
- data/samples/smelly_source/inline.rb +0 -704
- data/samples/smelly_source/optparse.rb +0 -1788
- data/samples/smelly_source/redcloth.rb +0 -1130
- data/samples/smelly_source/ruby.rb +0 -368
- data/samples/smelly_source/smelly.rb +0 -7
- data/samples/source_with_exclude_paths/ignore_me/uncommunicative_method_name.rb +0 -5
- data/samples/source_with_exclude_paths/nested/ignore_me_as_well/irresponsible_module.rb +0 -2
- data/samples/source_with_exclude_paths/nested/uncommunicative_parameter_name.rb +0 -6
- data/samples/source_with_exclude_paths/nested/uncommunicative_variable_name.rb +0 -6
- data/samples/source_with_hidden_directories/.hidden/hidden.rb +0 -1
- data/samples/source_with_hidden_directories/not_hidden.rb +0 -1
- data/samples/source_with_non_ruby_files/gibberish +0 -1
- data/samples/source_with_non_ruby_files/python_source.py +0 -1
- data/samples/source_with_non_ruby_files/ruby.rb +0 -6
- data/spec/performance/reek/smell_detectors/runtime_speed_spec.rb +0 -15
- data/spec/quality/documentation_spec.rb +0 -41
- data/spec/quality/reek_source_spec.rb +0 -11
- data/spec/reek/ast/node_spec.rb +0 -211
- data/spec/reek/ast/object_refs_spec.rb +0 -83
- data/spec/reek/ast/reference_collector_spec.rb +0 -47
- data/spec/reek/ast/sexp_extensions_spec.rb +0 -498
- data/spec/reek/cli/application_spec.rb +0 -168
- data/spec/reek/cli/command/report_command_spec.rb +0 -44
- data/spec/reek/cli/command/todo_list_command_spec.rb +0 -86
- data/spec/reek/cli/options_spec.rb +0 -51
- data/spec/reek/cli/silencer_spec.rb +0 -28
- data/spec/reek/code_comment_spec.rb +0 -184
- data/spec/reek/configuration/app_configuration_spec.rb +0 -195
- data/spec/reek/configuration/configuration_file_finder_spec.rb +0 -230
- data/spec/reek/configuration/default_directive_spec.rb +0 -13
- data/spec/reek/configuration/directory_directives_spec.rb +0 -122
- data/spec/reek/configuration/excluded_paths_spec.rb +0 -16
- data/spec/reek/configuration/rake_task_converter_spec.rb +0 -33
- data/spec/reek/configuration/schema_validator_spec.rb +0 -165
- data/spec/reek/context/code_context_spec.rb +0 -192
- data/spec/reek/context/ghost_context_spec.rb +0 -60
- data/spec/reek/context/method_context_spec.rb +0 -72
- data/spec/reek/context/module_context_spec.rb +0 -55
- data/spec/reek/context/root_context_spec.rb +0 -12
- data/spec/reek/context/statement_counter_spec.rb +0 -24
- data/spec/reek/context_builder_spec.rb +0 -457
- data/spec/reek/detector_repository_spec.rb +0 -22
- data/spec/reek/documentation_link_spec.rb +0 -20
- data/spec/reek/errors/base_error_spec.rb +0 -13
- data/spec/reek/examiner_spec.rb +0 -309
- data/spec/reek/logging_error_handler_spec.rb +0 -24
- data/spec/reek/rake/task_spec.rb +0 -56
- data/spec/reek/report/code_climate/code_climate_configuration_spec.rb +0 -22
- data/spec/reek/report/code_climate/code_climate_fingerprint_spec.rb +0 -126
- data/spec/reek/report/code_climate/code_climate_formatter_spec.rb +0 -51
- data/spec/reek/report/code_climate/code_climate_report_spec.rb +0 -56
- data/spec/reek/report/html_report_spec.rb +0 -19
- data/spec/reek/report/json_report_spec.rb +0 -58
- data/spec/reek/report/location_formatter_spec.rb +0 -32
- data/spec/reek/report/progress_formatter_spec.rb +0 -68
- data/spec/reek/report/text_report_spec.rb +0 -89
- data/spec/reek/report/xml_report_spec.rb +0 -24
- data/spec/reek/report/yaml_report_spec.rb +0 -55
- data/spec/reek/report_spec.rb +0 -28
- data/spec/reek/smell_configuration_spec.rb +0 -56
- data/spec/reek/smell_detectors/attribute_spec.rb +0 -197
- data/spec/reek/smell_detectors/base_detector_spec.rb +0 -50
- data/spec/reek/smell_detectors/boolean_parameter_spec.rb +0 -93
- data/spec/reek/smell_detectors/class_variable_spec.rb +0 -106
- data/spec/reek/smell_detectors/control_parameter_spec.rb +0 -300
- data/spec/reek/smell_detectors/data_clump_spec.rb +0 -134
- data/spec/reek/smell_detectors/duplicate_method_call_spec.rb +0 -211
- data/spec/reek/smell_detectors/feature_envy_spec.rb +0 -295
- data/spec/reek/smell_detectors/instance_variable_assumption_spec.rb +0 -96
- data/spec/reek/smell_detectors/irresponsible_module_spec.rb +0 -226
- data/spec/reek/smell_detectors/long_parameter_list_spec.rb +0 -61
- data/spec/reek/smell_detectors/long_yield_list_spec.rb +0 -49
- data/spec/reek/smell_detectors/manual_dispatch_spec.rb +0 -75
- data/spec/reek/smell_detectors/missing_safe_method_spec.rb +0 -68
- data/spec/reek/smell_detectors/module_initialize_spec.rb +0 -77
- data/spec/reek/smell_detectors/nested_iterators_spec.rb +0 -333
- data/spec/reek/smell_detectors/nil_check_spec.rb +0 -100
- data/spec/reek/smell_detectors/repeated_conditional_spec.rb +0 -100
- data/spec/reek/smell_detectors/subclassed_from_core_class_spec.rb +0 -77
- data/spec/reek/smell_detectors/too_many_constants_spec.rb +0 -144
- data/spec/reek/smell_detectors/too_many_instance_variables_spec.rb +0 -132
- data/spec/reek/smell_detectors/too_many_methods_spec.rb +0 -54
- data/spec/reek/smell_detectors/too_many_statements_spec.rb +0 -90
- data/spec/reek/smell_detectors/uncommunicative_method_name_spec.rb +0 -78
- data/spec/reek/smell_detectors/uncommunicative_module_name_spec.rb +0 -78
- data/spec/reek/smell_detectors/uncommunicative_parameter_name_spec.rb +0 -147
- data/spec/reek/smell_detectors/uncommunicative_variable_name_spec.rb +0 -201
- data/spec/reek/smell_detectors/unused_parameters_spec.rb +0 -114
- data/spec/reek/smell_detectors/unused_private_method_spec.rb +0 -205
- data/spec/reek/smell_detectors/utility_function_spec.rb +0 -293
- data/spec/reek/smell_warning_spec.rb +0 -137
- data/spec/reek/source/source_code_spec.rb +0 -79
- data/spec/reek/source/source_locator_spec.rb +0 -166
- data/spec/reek/spec/should_reek_of_spec.rb +0 -153
- data/spec/reek/spec/should_reek_only_of_spec.rb +0 -91
- data/spec/reek/spec/should_reek_spec.rb +0 -52
- data/spec/reek/spec/smell_matcher_spec.rb +0 -87
- data/spec/reek/tree_dresser_spec.rb +0 -46
- data/spec/spec_helper.rb +0 -110
- data/tasks/configuration.rake +0 -18
- data/tasks/console.rake +0 -5
- data/tasks/reek.rake +0 -6
- data/tasks/rubocop.rake +0 -11
- data/tasks/test.rake +0 -32
- /data/lib/reek/{report/code_climate.rb → code_climate.rb} +0 -0
|
@@ -1,226 +0,0 @@
|
|
|
1
|
-
require_relative '../../spec_helper'
|
|
2
|
-
require_lib 'reek/smell_detectors/irresponsible_module'
|
|
3
|
-
|
|
4
|
-
RSpec.describe Reek::SmellDetectors::IrresponsibleModule do
|
|
5
|
-
it 'reports the right values' do
|
|
6
|
-
src = <<-RUBY
|
|
7
|
-
class Alfa
|
|
8
|
-
end
|
|
9
|
-
RUBY
|
|
10
|
-
|
|
11
|
-
expect(src).to reek_of(:IrresponsibleModule,
|
|
12
|
-
lines: [1],
|
|
13
|
-
context: 'Alfa',
|
|
14
|
-
message: 'has no descriptive comment',
|
|
15
|
-
source: 'string')
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
it 'does count all occurences' do
|
|
19
|
-
src = <<-RUBY
|
|
20
|
-
class Alfa
|
|
21
|
-
# Method is necessary because we don't count namespace classes.
|
|
22
|
-
def bravo; end
|
|
23
|
-
class Charlie
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
RUBY
|
|
27
|
-
|
|
28
|
-
expect(src).
|
|
29
|
-
to reek_of(:IrresponsibleModule, lines: [1], context: 'Alfa').
|
|
30
|
-
and reek_of(:IrresponsibleModule, lines: [4], context: 'Alfa::Charlie')
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
%w(class module).each do |scope|
|
|
34
|
-
it "reports a #{scope} without a comment" do
|
|
35
|
-
src = <<-RUBY
|
|
36
|
-
#{scope} Alfa
|
|
37
|
-
end
|
|
38
|
-
RUBY
|
|
39
|
-
|
|
40
|
-
expect(src).to reek_of(:IrresponsibleModule)
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
it "does not report a #{scope} having a comment" do
|
|
44
|
-
src = <<-RUBY
|
|
45
|
-
# Do not report me, I'm responsible!
|
|
46
|
-
#{scope} Alfa; end
|
|
47
|
-
RUBY
|
|
48
|
-
|
|
49
|
-
expect(src).not_to reek_of(:IrresponsibleModule)
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
it "reports a #{scope} with an empty comment" do
|
|
53
|
-
src = <<-RUBY
|
|
54
|
-
#
|
|
55
|
-
#
|
|
56
|
-
#
|
|
57
|
-
#{scope} Alfa; end
|
|
58
|
-
RUBY
|
|
59
|
-
|
|
60
|
-
expect(src).to reek_of(:IrresponsibleModule)
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
it "reports a #{scope} with a preceding comment with intermittent material" do
|
|
64
|
-
src = <<-RUBY
|
|
65
|
-
# This is a comment that should not be related to Bravo
|
|
66
|
-
|
|
67
|
-
require 'alfa'
|
|
68
|
-
|
|
69
|
-
#{scope} Bravo
|
|
70
|
-
end
|
|
71
|
-
RUBY
|
|
72
|
-
|
|
73
|
-
expect(src).to reek_of(:IrresponsibleModule)
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
it "reports a #{scope} with only a trailing comment" do
|
|
77
|
-
src = <<-RUBY
|
|
78
|
-
#{scope} Alfa
|
|
79
|
-
end # This belongs to Alfa but doesn't count
|
|
80
|
-
RUBY
|
|
81
|
-
|
|
82
|
-
expect(src).to reek_of(:IrresponsibleModule)
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
it "does not report #{scope} used only as a namespace" do
|
|
86
|
-
src = <<-RUBY
|
|
87
|
-
#{scope} Alfa
|
|
88
|
-
# Describes Bravo
|
|
89
|
-
#{scope} Bravo
|
|
90
|
-
def charlie
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
end
|
|
94
|
-
RUBY
|
|
95
|
-
|
|
96
|
-
expect(src).not_to reek_of(:IrresponsibleModule, context: 'Alfa')
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
it "does not report #{scope} used only as a namespace for several nested moduless" do
|
|
100
|
-
src = <<-RUBY
|
|
101
|
-
#{scope} Alfa
|
|
102
|
-
# Describes Bravo
|
|
103
|
-
class Bravo
|
|
104
|
-
def charlie
|
|
105
|
-
end
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
# Describes Delta
|
|
109
|
-
module Delta
|
|
110
|
-
end
|
|
111
|
-
end
|
|
112
|
-
RUBY
|
|
113
|
-
|
|
114
|
-
expect(src).not_to reek_of(:IrresponsibleModule, context: 'Alfa')
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
it "reports #{scope} that is used as a namespace but also has methods" do
|
|
118
|
-
src = <<-RUBY
|
|
119
|
-
#{scope} Alfa
|
|
120
|
-
def bravo
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
# Describes Charlie
|
|
124
|
-
#{scope} Charlie
|
|
125
|
-
end
|
|
126
|
-
end
|
|
127
|
-
RUBY
|
|
128
|
-
|
|
129
|
-
expect(src).to reek_of(:IrresponsibleModule, context: 'Alfa')
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
it "reports #{scope} that is used as a namespace but also has singleton methods" do
|
|
133
|
-
src = <<-RUBY
|
|
134
|
-
#{scope} Alfa
|
|
135
|
-
def self.bravo
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
# Describes Charlie
|
|
139
|
-
#{scope} Charlie
|
|
140
|
-
end
|
|
141
|
-
end
|
|
142
|
-
RUBY
|
|
143
|
-
|
|
144
|
-
expect(src).to reek_of(:IrresponsibleModule, context: 'Alfa')
|
|
145
|
-
end
|
|
146
|
-
|
|
147
|
-
it "does not report a namespace #{scope} that has a nested class through assignment" do
|
|
148
|
-
src = <<-RUBY
|
|
149
|
-
#{scope} Alfa
|
|
150
|
-
# Bravo is responsible
|
|
151
|
-
Bravo = Class.new Charlie do
|
|
152
|
-
def delta; end
|
|
153
|
-
end
|
|
154
|
-
end
|
|
155
|
-
RUBY
|
|
156
|
-
|
|
157
|
-
expect(src).not_to reek_of(:IrresponsibleModule, context: 'Alfa')
|
|
158
|
-
end
|
|
159
|
-
|
|
160
|
-
it "does not report #{scope} only containing constants" do
|
|
161
|
-
src = <<-RUBY
|
|
162
|
-
#{scope} Alfa
|
|
163
|
-
Bravo = 23
|
|
164
|
-
end
|
|
165
|
-
RUBY
|
|
166
|
-
|
|
167
|
-
expect(src).not_to reek_of(:IrresponsibleModule, context: 'Alfa')
|
|
168
|
-
end
|
|
169
|
-
|
|
170
|
-
it "reports #{scope} that contains method calls" do
|
|
171
|
-
src = <<-RUBY
|
|
172
|
-
#{scope} Alfa
|
|
173
|
-
bravo :charlie
|
|
174
|
-
end
|
|
175
|
-
RUBY
|
|
176
|
-
|
|
177
|
-
expect(src).to reek_of(:IrresponsibleModule, context: 'Alfa')
|
|
178
|
-
end
|
|
179
|
-
|
|
180
|
-
it "reports #{scope} that contains non-constant assignments" do
|
|
181
|
-
src = <<-RUBY
|
|
182
|
-
#{scope} Alfa
|
|
183
|
-
bravo = charlie
|
|
184
|
-
end
|
|
185
|
-
RUBY
|
|
186
|
-
|
|
187
|
-
expect(src).to reek_of(:IrresponsibleModule, context: 'Alfa')
|
|
188
|
-
end
|
|
189
|
-
|
|
190
|
-
it "reports an irresponsible #{scope} defined through assignment" do
|
|
191
|
-
src = <<-RUBY
|
|
192
|
-
# Alfa is responsible, but Bravo is not
|
|
193
|
-
#{scope} Alfa
|
|
194
|
-
Bravo = Class.new Charlie # Only "class" is supposed to reek here.
|
|
195
|
-
end
|
|
196
|
-
RUBY
|
|
197
|
-
|
|
198
|
-
expect(src).to reek_of(:IrresponsibleModule, context: 'Alfa::Bravo')
|
|
199
|
-
end
|
|
200
|
-
|
|
201
|
-
it 'reports structs defined through assignment' do
|
|
202
|
-
src = <<-RUBY
|
|
203
|
-
# Alfa is responsible, but Bravo is not
|
|
204
|
-
#{scope} Alfa
|
|
205
|
-
Bravo = Struct.new(:charlie)
|
|
206
|
-
end
|
|
207
|
-
RUBY
|
|
208
|
-
|
|
209
|
-
expect(src).to reek_of(:IrresponsibleModule, context: 'Alfa::Bravo')
|
|
210
|
-
end
|
|
211
|
-
|
|
212
|
-
it 'does not report constants that are not classes' do
|
|
213
|
-
src = <<-RUBY
|
|
214
|
-
# Alfa is responsible
|
|
215
|
-
#{scope} Alfa
|
|
216
|
-
Bravo = 23
|
|
217
|
-
Charlie = Hash.new
|
|
218
|
-
Delta = ''.freeze
|
|
219
|
-
Echo = Class.new.new
|
|
220
|
-
end
|
|
221
|
-
RUBY
|
|
222
|
-
|
|
223
|
-
expect(src).not_to reek_of(:IrresponsibleModule)
|
|
224
|
-
end
|
|
225
|
-
end
|
|
226
|
-
end
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
require_relative '../../spec_helper'
|
|
2
|
-
require_lib 'reek/smell_detectors/long_parameter_list'
|
|
3
|
-
|
|
4
|
-
RSpec.describe Reek::SmellDetectors::LongParameterList do
|
|
5
|
-
it 'reports the right values' do
|
|
6
|
-
src = <<-RUBY
|
|
7
|
-
class Alfa
|
|
8
|
-
def bravo(charlie, delta, echo, foxtrot)
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
RUBY
|
|
12
|
-
|
|
13
|
-
expect(src).to reek_of(:LongParameterList,
|
|
14
|
-
lines: [2],
|
|
15
|
-
context: 'Alfa#bravo',
|
|
16
|
-
message: 'has 4 parameters',
|
|
17
|
-
source: 'string',
|
|
18
|
-
count: 4)
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
it 'does count all occurences' do
|
|
22
|
-
src = <<-RUBY
|
|
23
|
-
class Alfa
|
|
24
|
-
def bravo(charlie, delta, echo, foxtrot)
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def golf(hotel, india, juliett, kilo)
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
RUBY
|
|
31
|
-
|
|
32
|
-
expect(src).
|
|
33
|
-
to reek_of(:LongParameterList, lines: [2], context: 'Alfa#bravo').
|
|
34
|
-
and reek_of(:LongParameterList, lines: [5], context: 'Alfa#golf')
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
it 'reports nothing for 3 parameters' do
|
|
38
|
-
src = 'def alfa(bravo, charlie, delta); end'
|
|
39
|
-
expect(src).not_to reek_of(:LongParameterList)
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
it 'does not count an optional block' do
|
|
43
|
-
src = 'def alfa(bravo, charlie, delta, &block); end'
|
|
44
|
-
expect(src).not_to reek_of(:LongParameterList)
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
it 'does not report inner block with too many parameters' do
|
|
48
|
-
src = <<-RUBY
|
|
49
|
-
def alfa(bravo)
|
|
50
|
-
bravo.each { |charlie, delta, echo, foxtrot| }
|
|
51
|
-
end
|
|
52
|
-
RUBY
|
|
53
|
-
|
|
54
|
-
expect(src).not_to reek_of(:LongParameterList)
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
it 'reports 4 parameters with default parameters' do
|
|
58
|
-
src = 'def alfa(bravo = 1, charlie = 2, delta = 3, echo = 4); end'
|
|
59
|
-
expect(src).to reek_of(:LongParameterList)
|
|
60
|
-
end
|
|
61
|
-
end
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
require_relative '../../spec_helper'
|
|
2
|
-
require_lib 'reek/smell_detectors/long_yield_list'
|
|
3
|
-
|
|
4
|
-
RSpec.describe Reek::SmellDetectors::LongYieldList do
|
|
5
|
-
it 'reports the right values' do
|
|
6
|
-
src = <<-RUBY
|
|
7
|
-
class Alfa
|
|
8
|
-
def bravo(charlie, delta, echo, foxtrot)
|
|
9
|
-
yield charlie, delta, echo, foxtrot
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
RUBY
|
|
13
|
-
|
|
14
|
-
expect(src).to reek_of(:LongYieldList,
|
|
15
|
-
lines: [3],
|
|
16
|
-
context: 'Alfa#bravo',
|
|
17
|
-
message: 'yields 4 parameters',
|
|
18
|
-
source: 'string',
|
|
19
|
-
count: 4)
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
it 'does count all occurences' do
|
|
23
|
-
src = <<-RUBY
|
|
24
|
-
class Alfa
|
|
25
|
-
def bravo(charlie, delta, echo, foxtrot)
|
|
26
|
-
yield charlie, delta, echo, foxtrot
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def golf(hotel, india, juliett, kilo)
|
|
30
|
-
yield hotel, india, juliett, kilo
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
RUBY
|
|
34
|
-
|
|
35
|
-
expect(src).
|
|
36
|
-
to reek_of(:LongYieldList, lines: [3], context: 'Alfa#bravo').
|
|
37
|
-
and reek_of(:LongYieldList, lines: [7], context: 'Alfa#golf')
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
it 'does not report yield with 3 parameters' do
|
|
41
|
-
src = <<-RUBY
|
|
42
|
-
def alfa(bravo, charlie, delta)
|
|
43
|
-
yield bravo, charlie, delta
|
|
44
|
-
end
|
|
45
|
-
RUBY
|
|
46
|
-
|
|
47
|
-
expect(src).not_to reek_of(:LongYieldList)
|
|
48
|
-
end
|
|
49
|
-
end
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
require_relative '../../spec_helper'
|
|
2
|
-
require_lib 'reek/smell_detectors/too_many_constants'
|
|
3
|
-
|
|
4
|
-
RSpec.describe Reek::SmellDetectors::ManualDispatch do
|
|
5
|
-
it 'reports the right values' do
|
|
6
|
-
src = <<-RUBY
|
|
7
|
-
class Alfa
|
|
8
|
-
def bravo(charlie)
|
|
9
|
-
true if charlie.respond_to?(:to_a)
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
RUBY
|
|
13
|
-
|
|
14
|
-
expect(src).to reek_of(:ManualDispatch,
|
|
15
|
-
lines: [3],
|
|
16
|
-
context: 'Alfa#bravo',
|
|
17
|
-
message: 'manually dispatches method call',
|
|
18
|
-
source: 'string')
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
it 'does count all occurences' do
|
|
22
|
-
src = <<-RUBY
|
|
23
|
-
class Alfa
|
|
24
|
-
def bravo(charlie)
|
|
25
|
-
true if charlie.respond_to?(:to_a)
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def delta(echo)
|
|
29
|
-
true if echo.respond_to?(:to_a)
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
RUBY
|
|
33
|
-
|
|
34
|
-
expect(src).
|
|
35
|
-
to reek_of(:ManualDispatch, lines: [3], context: 'Alfa#bravo').
|
|
36
|
-
and reek_of(:ManualDispatch, lines: [7], context: 'Alfa#delta')
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
it 'reports manual dispatch smell when using #respond_to? on implicit self' do
|
|
40
|
-
src = <<-RUBY
|
|
41
|
-
class Alfa
|
|
42
|
-
def bravo
|
|
43
|
-
charlie if respond_to?(:delta)
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
RUBY
|
|
47
|
-
|
|
48
|
-
expect(src).to reek_of(:ManualDispatch)
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
it 'reports manual dispatch within a conditional' do
|
|
52
|
-
src = <<-RUBY
|
|
53
|
-
class Alfa
|
|
54
|
-
def bravo
|
|
55
|
-
charlie.respond_to?(:delta) && charlie.echo
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
RUBY
|
|
59
|
-
|
|
60
|
-
expect(src).to reek_of(:ManualDispatch)
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
it 'reports occurences in a single method as one smell warning' do
|
|
64
|
-
src = <<-RUBY
|
|
65
|
-
class Alfa
|
|
66
|
-
def bravo(charlie, delta)
|
|
67
|
-
return true if charlie.respond_to?(:to_a)
|
|
68
|
-
true if delta.respond_to?(:to_a)
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
RUBY
|
|
72
|
-
|
|
73
|
-
expect(src).to reek_of(:ManualDispatch, lines: [3, 4], context: 'Alfa#bravo')
|
|
74
|
-
end
|
|
75
|
-
end
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
require_relative '../../spec_helper'
|
|
2
|
-
require_lib 'reek/smell_detectors/missing_safe_method'
|
|
3
|
-
|
|
4
|
-
RSpec.describe Reek::SmellDetectors::MissingSafeMethod do
|
|
5
|
-
it 'reports the right values' do
|
|
6
|
-
src = <<-RUBY
|
|
7
|
-
class Alfa
|
|
8
|
-
def bravo!
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
RUBY
|
|
12
|
-
|
|
13
|
-
expect(src).to reek_of(:MissingSafeMethod,
|
|
14
|
-
lines: [2],
|
|
15
|
-
context: 'Alfa',
|
|
16
|
-
message: "has missing safe method 'bravo!'",
|
|
17
|
-
source: 'string',
|
|
18
|
-
name: 'bravo!')
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
it 'does count all occurences' do
|
|
22
|
-
src = <<-RUBY
|
|
23
|
-
class Alfa
|
|
24
|
-
def bravo!
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def charlie!
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
RUBY
|
|
31
|
-
|
|
32
|
-
expect(src).
|
|
33
|
-
to reek_of(:MissingSafeMethod, lines: [2], name: 'bravo!').
|
|
34
|
-
and reek_of(:MissingSafeMethod, lines: [5], name: 'charlie!')
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
it 'reports nothing when method and bang counterpart exist' do
|
|
38
|
-
src = <<-RUBY
|
|
39
|
-
class Alfa
|
|
40
|
-
def bravo
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def bravo!
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
RUBY
|
|
47
|
-
|
|
48
|
-
expect(src).not_to reek_of(:MissingSafeMethod)
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
it 'does not report methods we excluded via comment' do
|
|
52
|
-
source = <<-RUBY
|
|
53
|
-
# :reek:MissingSafeMethod { exclude: [ bravo! ] }
|
|
54
|
-
class Alfa
|
|
55
|
-
def bravo!
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
def charlie!
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
RUBY
|
|
62
|
-
|
|
63
|
-
aggregate_failures do
|
|
64
|
-
expect(source).not_to reek_of(:MissingSafeMethod, name: 'bravo!')
|
|
65
|
-
expect(source).to reek_of(:MissingSafeMethod, name: 'charlie!')
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
end
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
require_relative '../../spec_helper'
|
|
2
|
-
require_lib 'reek/smell_detectors/module_initialize'
|
|
3
|
-
|
|
4
|
-
RSpec.describe Reek::SmellDetectors::ModuleInitialize do
|
|
5
|
-
it 'reports the right values' do
|
|
6
|
-
src = <<-RUBY
|
|
7
|
-
module Alfa
|
|
8
|
-
def initialize; end
|
|
9
|
-
end
|
|
10
|
-
RUBY
|
|
11
|
-
|
|
12
|
-
expect(src).to reek_of(:ModuleInitialize,
|
|
13
|
-
lines: [1],
|
|
14
|
-
context: 'Alfa',
|
|
15
|
-
message: 'has initialize method',
|
|
16
|
-
source: 'string')
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
it 'reports nothing for a method with a different name' do
|
|
20
|
-
src = <<-RUBY
|
|
21
|
-
module Alfa
|
|
22
|
-
def bravo; end
|
|
23
|
-
end
|
|
24
|
-
RUBY
|
|
25
|
-
|
|
26
|
-
expect(src).not_to reek_of(:ModuleInitialize)
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
it 'reports nothing for a method named initialize in a nested class' do
|
|
30
|
-
src = <<-RUBY
|
|
31
|
-
module Alfa
|
|
32
|
-
class Bravo
|
|
33
|
-
def initialize; end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
RUBY
|
|
37
|
-
|
|
38
|
-
expect(src).not_to reek_of(:ModuleInitialize)
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
it 'reports nothing for a method named initialize in a nested struct' do
|
|
42
|
-
src = <<-RUBY
|
|
43
|
-
module Alfa
|
|
44
|
-
Bravo = Struct.new(:charlie) do
|
|
45
|
-
def initialize; end
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
RUBY
|
|
49
|
-
|
|
50
|
-
expect(src).not_to reek_of(:ModuleInitialize)
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
it 'reports nothing for a method named initialize in a nested dynamic class' do
|
|
54
|
-
src = <<-RUBY
|
|
55
|
-
module Alfa
|
|
56
|
-
def self.bravo
|
|
57
|
-
Class.new do
|
|
58
|
-
def initialize; end
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
RUBY
|
|
63
|
-
|
|
64
|
-
expect(src).not_to reek_of(:ModuleInitialize)
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
it 'can be disabled via comment' do
|
|
68
|
-
src = <<-RUBY
|
|
69
|
-
# :reek:ModuleInitialize
|
|
70
|
-
module Alfa
|
|
71
|
-
def initialize; end
|
|
72
|
-
end
|
|
73
|
-
RUBY
|
|
74
|
-
|
|
75
|
-
expect(src).not_to reek_of(:ModuleInitialize)
|
|
76
|
-
end
|
|
77
|
-
end
|