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,144 +0,0 @@
|
|
|
1
|
-
require_relative '../../spec_helper'
|
|
2
|
-
require_lib 'reek/smell_detectors/too_many_constants'
|
|
3
|
-
|
|
4
|
-
RSpec.describe Reek::SmellDetectors::TooManyConstants do
|
|
5
|
-
let(:config) do
|
|
6
|
-
{ Reek::SmellDetectors::TooManyConstants::MAX_ALLOWED_CONSTANTS_KEY => 2 }
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
it 'reports the right values' do
|
|
10
|
-
src = <<-RUBY
|
|
11
|
-
class Alfa
|
|
12
|
-
Bravo = Charlie = Delta = 1
|
|
13
|
-
end
|
|
14
|
-
RUBY
|
|
15
|
-
|
|
16
|
-
expect(src).to reek_of(:TooManyConstants,
|
|
17
|
-
lines: [1],
|
|
18
|
-
context: 'Alfa',
|
|
19
|
-
message: 'has 3 constants',
|
|
20
|
-
source: 'string',
|
|
21
|
-
count: 3).with_config(config)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
it 'does not report for non-excessive constants' do
|
|
25
|
-
src = <<-RUBY
|
|
26
|
-
class Alfa
|
|
27
|
-
Bravo = Charlie = 1
|
|
28
|
-
end
|
|
29
|
-
RUBY
|
|
30
|
-
|
|
31
|
-
expect(src).not_to reek_of(:TooManyConstants).with_config(config)
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
it 'does not report when increasing default' do
|
|
35
|
-
src = <<-RUBY
|
|
36
|
-
# :reek:TooManyConstants { max_constants: 3 }
|
|
37
|
-
class Alfa
|
|
38
|
-
Bravo = Charlie = Delta = 1
|
|
39
|
-
end
|
|
40
|
-
RUBY
|
|
41
|
-
|
|
42
|
-
expect(src).not_to reek_of(:TooManyConstants).with_config(config)
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
it 'does not report when disabled' do
|
|
46
|
-
src = <<-RUBY
|
|
47
|
-
# :reek:TooManyConstants { enabled: false }
|
|
48
|
-
class Alfa
|
|
49
|
-
Bravo = Charlie = Delta = 1
|
|
50
|
-
end
|
|
51
|
-
RUBY
|
|
52
|
-
|
|
53
|
-
expect(src).not_to reek_of(:TooManyConstants).with_config(config)
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
it 'does not account class definition' do
|
|
57
|
-
src = <<-RUBY
|
|
58
|
-
class Alfa
|
|
59
|
-
Bravo = Charlie = 1
|
|
60
|
-
Delta = Class.new(StandardError)
|
|
61
|
-
end
|
|
62
|
-
RUBY
|
|
63
|
-
|
|
64
|
-
expect(src).not_to reek_of(:TooManyConstants).with_config(config)
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
it 'does not account struct definition' do
|
|
68
|
-
src = <<-RUBY
|
|
69
|
-
class Alfa
|
|
70
|
-
Bravo = Charlie = 1
|
|
71
|
-
Delta = Struct.new
|
|
72
|
-
end
|
|
73
|
-
RUBY
|
|
74
|
-
|
|
75
|
-
expect(src).not_to reek_of(:TooManyConstants).with_config(config)
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
it 'counts each constant only once' do
|
|
79
|
-
src = <<-RUBY
|
|
80
|
-
class Alfa
|
|
81
|
-
Bravo = Charlie = 1
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
class Delta
|
|
85
|
-
Echo = Foxtrot = 1
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
class Golf
|
|
89
|
-
Hotel = India = 1
|
|
90
|
-
end
|
|
91
|
-
RUBY
|
|
92
|
-
|
|
93
|
-
expect(src).not_to reek_of(:TooManyConstants).with_config(config)
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
it 'does not report outer module when inner module suppressed' do
|
|
97
|
-
src = <<-RUBY
|
|
98
|
-
module Alfa
|
|
99
|
-
# ignore :reek:TooManyConstants
|
|
100
|
-
module Bravo
|
|
101
|
-
Charlie = Delta = Echo = 1
|
|
102
|
-
end
|
|
103
|
-
end
|
|
104
|
-
RUBY
|
|
105
|
-
|
|
106
|
-
expect(src).not_to reek_of(:TooManyConstants).with_config(config)
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
it 'counts each constant only once for each namespace' do
|
|
110
|
-
src = <<-RUBY
|
|
111
|
-
module Alfa
|
|
112
|
-
Bravo = Charlie = 1
|
|
113
|
-
|
|
114
|
-
class Delta
|
|
115
|
-
Echo = 1
|
|
116
|
-
end
|
|
117
|
-
end
|
|
118
|
-
RUBY
|
|
119
|
-
|
|
120
|
-
expect(src).not_to reek_of(:TooManyConstants).with_config(config)
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
it 'reports for excessive constants inside a module' do
|
|
124
|
-
src = <<-RUBY
|
|
125
|
-
module Alfa
|
|
126
|
-
Bravo = Charlie = Delta = 1
|
|
127
|
-
end
|
|
128
|
-
RUBY
|
|
129
|
-
|
|
130
|
-
expect(src).to reek_of(:TooManyConstants, context: 'Alfa').with_config(config)
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
it 'reports the full class name' do
|
|
134
|
-
src = <<-RUBY
|
|
135
|
-
module Alfa
|
|
136
|
-
class Bravo
|
|
137
|
-
Charlie = Delta = Echo = 1
|
|
138
|
-
end
|
|
139
|
-
end
|
|
140
|
-
RUBY
|
|
141
|
-
|
|
142
|
-
expect(src).to reek_of(:TooManyConstants, context: 'Alfa::Bravo').with_config(config)
|
|
143
|
-
end
|
|
144
|
-
end
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
require_relative '../../spec_helper'
|
|
2
|
-
require_lib 'reek/smell_detectors/too_many_instance_variables'
|
|
3
|
-
|
|
4
|
-
RSpec.describe Reek::SmellDetectors::TooManyInstanceVariables do
|
|
5
|
-
let(:config) do
|
|
6
|
-
{ Reek::SmellDetectors::TooManyInstanceVariables::MAX_ALLOWED_IVARS_KEY => 2 }
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
it 'reports the right values' do
|
|
10
|
-
src = <<-RUBY
|
|
11
|
-
class Alfa
|
|
12
|
-
def bravo
|
|
13
|
-
@charlie = @delta = @echo = 1
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
RUBY
|
|
17
|
-
|
|
18
|
-
expect(src).to reek_of(:TooManyInstanceVariables,
|
|
19
|
-
lines: [1],
|
|
20
|
-
context: 'Alfa',
|
|
21
|
-
message: 'has at least 3 instance variables',
|
|
22
|
-
source: 'string',
|
|
23
|
-
count: 3).with_config(config)
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
it 'does not report for non-excessive ivars' do
|
|
27
|
-
src = <<-RUBY
|
|
28
|
-
class Alfa
|
|
29
|
-
def bravo
|
|
30
|
-
@charlie = @delta = 1
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
RUBY
|
|
34
|
-
|
|
35
|
-
expect(src).not_to reek_of(:TooManyInstanceVariables).with_config(config)
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
it 'has a configurable maximum' do
|
|
39
|
-
src = <<-RUBY
|
|
40
|
-
# :reek:TooManyInstanceVariables { max_instance_variables: 3 }
|
|
41
|
-
class Alfa
|
|
42
|
-
def bravo
|
|
43
|
-
@charlie = @delta = @echo = 1
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
RUBY
|
|
47
|
-
|
|
48
|
-
expect(src).not_to reek_of(:TooManyInstanceVariables).with_config(config)
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
it 'counts each ivar only once' do
|
|
52
|
-
src = <<-RUBY
|
|
53
|
-
class Alfa
|
|
54
|
-
def bravo
|
|
55
|
-
@charlie = @delta = 1
|
|
56
|
-
@charlie = @delta = 1
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
RUBY
|
|
60
|
-
|
|
61
|
-
expect(src).not_to reek_of(:TooManyInstanceVariables).with_config(config)
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
it 'does not report memoized bravo' do
|
|
65
|
-
src = <<-RUBY
|
|
66
|
-
class Alfa
|
|
67
|
-
def bravo
|
|
68
|
-
@charlie = @delta = 1
|
|
69
|
-
@echo ||= 1
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
RUBY
|
|
73
|
-
|
|
74
|
-
expect(src).not_to reek_of(:TooManyInstanceVariables).with_config(config)
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
it 'does not count ivars across inner classes' do
|
|
78
|
-
src = <<-RUBY
|
|
79
|
-
class Alfa
|
|
80
|
-
class Bravo
|
|
81
|
-
def charlie
|
|
82
|
-
@delta = @echo = 1
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
class Hotel
|
|
87
|
-
def india
|
|
88
|
-
@juliett = 1
|
|
89
|
-
end
|
|
90
|
-
end
|
|
91
|
-
end
|
|
92
|
-
RUBY
|
|
93
|
-
|
|
94
|
-
expect(src).not_to reek_of(:TooManyInstanceVariables).with_config(config)
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
it 'does not count ivars across inner modules and classes' do
|
|
98
|
-
src = <<-RUBY
|
|
99
|
-
class Alfa
|
|
100
|
-
class Bravo
|
|
101
|
-
def charlie
|
|
102
|
-
@delta = @echo = 1
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
module Foxtrot
|
|
107
|
-
def golf
|
|
108
|
-
@hotel = 1
|
|
109
|
-
end
|
|
110
|
-
end
|
|
111
|
-
end
|
|
112
|
-
RUBY
|
|
113
|
-
|
|
114
|
-
expect(src).not_to reek_of(:TooManyInstanceVariables).with_config(config)
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
it 'reports excessive ivars across different methods' do
|
|
118
|
-
src = <<-RUBY
|
|
119
|
-
class Alfa
|
|
120
|
-
def bravo
|
|
121
|
-
@charlie = @delta = 1
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
def golf
|
|
125
|
-
@hotel = 1
|
|
126
|
-
end
|
|
127
|
-
end
|
|
128
|
-
RUBY
|
|
129
|
-
|
|
130
|
-
expect(src).to reek_of(:TooManyInstanceVariables).with_config(config)
|
|
131
|
-
end
|
|
132
|
-
end
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
require_relative '../../spec_helper'
|
|
2
|
-
require_lib 'reek/smell_detectors/too_many_methods'
|
|
3
|
-
|
|
4
|
-
RSpec.describe Reek::SmellDetectors::TooManyMethods do
|
|
5
|
-
let(:config) do
|
|
6
|
-
{ Reek::SmellDetectors::TooManyMethods::MAX_ALLOWED_METHODS_KEY => 3 }
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
it 'reports the right values' do
|
|
10
|
-
src = <<-RUBY
|
|
11
|
-
class Alfa
|
|
12
|
-
def bravo; end
|
|
13
|
-
def charlie; end
|
|
14
|
-
def delta; end
|
|
15
|
-
def echo; end
|
|
16
|
-
end
|
|
17
|
-
RUBY
|
|
18
|
-
|
|
19
|
-
expect(src).to reek_of(:TooManyMethods,
|
|
20
|
-
lines: [1],
|
|
21
|
-
context: 'Alfa',
|
|
22
|
-
message: 'has at least 4 methods',
|
|
23
|
-
source: 'string',
|
|
24
|
-
count: 4).with_config(config)
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it 'does not report if we stay below max_methods' do
|
|
28
|
-
src = <<-RUBY
|
|
29
|
-
class Alfa
|
|
30
|
-
def bravo; end
|
|
31
|
-
def charlie; end
|
|
32
|
-
def delta; end
|
|
33
|
-
end
|
|
34
|
-
RUBY
|
|
35
|
-
|
|
36
|
-
expect(src).not_to reek_of(:TooManyMethods).with_config(config)
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
it 'stops at a nested module' do
|
|
40
|
-
src = <<-RUBY
|
|
41
|
-
class Alfa
|
|
42
|
-
def bravo; end
|
|
43
|
-
def charlie; end
|
|
44
|
-
|
|
45
|
-
module Hidden
|
|
46
|
-
def delta; end
|
|
47
|
-
def echo; end
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
RUBY
|
|
51
|
-
|
|
52
|
-
expect(src).not_to reek_of(:TooManyMethods).with_config(config)
|
|
53
|
-
end
|
|
54
|
-
end
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
require_relative '../../spec_helper'
|
|
2
|
-
require_lib 'reek/smell_detectors/too_many_statements'
|
|
3
|
-
|
|
4
|
-
RSpec.describe Reek::SmellDetectors::TooManyStatements do
|
|
5
|
-
let(:config) do
|
|
6
|
-
{ Reek::SmellDetectors::TooManyStatements::MAX_ALLOWED_STATEMENTS_KEY => 2 }
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
it 'reports the right values' do
|
|
10
|
-
src = <<-RUBY
|
|
11
|
-
class Alfa
|
|
12
|
-
def bravo
|
|
13
|
-
charlie = 1
|
|
14
|
-
delta = 2
|
|
15
|
-
echo = 3
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
RUBY
|
|
19
|
-
|
|
20
|
-
expect(src).to reek_of(:TooManyStatements,
|
|
21
|
-
lines: [2],
|
|
22
|
-
context: 'Alfa#bravo',
|
|
23
|
-
message: 'has approx 3 statements',
|
|
24
|
-
source: 'string',
|
|
25
|
-
count: 3).with_config(config)
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
it 'does count all occurences' do
|
|
29
|
-
src = <<-RUBY
|
|
30
|
-
class Alfa
|
|
31
|
-
def bravo
|
|
32
|
-
charlie = 1
|
|
33
|
-
delta = 2
|
|
34
|
-
echo = 3
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def foxtrot
|
|
38
|
-
golf = 1
|
|
39
|
-
hotel = 2
|
|
40
|
-
india = 3
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
RUBY
|
|
44
|
-
|
|
45
|
-
expect(src).
|
|
46
|
-
to reek_of(:TooManyStatements, lines: [2], context: 'Alfa#bravo').with_config(config).
|
|
47
|
-
and reek_of(:TooManyStatements, lines: [8], context: 'Alfa#foxtrot').with_config(config)
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
it 'does not report short methods' do
|
|
51
|
-
src = <<-RUBY
|
|
52
|
-
class Alfa
|
|
53
|
-
def bravo
|
|
54
|
-
charlie = 1
|
|
55
|
-
delta = 2
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
RUBY
|
|
59
|
-
|
|
60
|
-
expect(src).not_to reek_of(:TooManyStatements).with_config(config)
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
it 'does not report initialize' do
|
|
64
|
-
src = <<-RUBY
|
|
65
|
-
class Alfa
|
|
66
|
-
def initialize
|
|
67
|
-
charlie = 1
|
|
68
|
-
delta = 2
|
|
69
|
-
echo = 3
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
RUBY
|
|
73
|
-
|
|
74
|
-
expect(src).not_to reek_of(:TooManyStatements).with_config(config)
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
it 'reports long inner block' do
|
|
78
|
-
src = <<-RUBY
|
|
79
|
-
def long
|
|
80
|
-
self.each do |x|
|
|
81
|
-
charlie = 1
|
|
82
|
-
delta = 2
|
|
83
|
-
echo = 3
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
RUBY
|
|
87
|
-
|
|
88
|
-
expect(src).to reek_of(:TooManyStatements).with_config(config)
|
|
89
|
-
end
|
|
90
|
-
end
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
require_relative '../../spec_helper'
|
|
2
|
-
require_lib 'reek/smell_detectors/uncommunicative_method_name'
|
|
3
|
-
|
|
4
|
-
RSpec.describe Reek::SmellDetectors::UncommunicativeMethodName do
|
|
5
|
-
it 'reports the right values' do
|
|
6
|
-
src = <<-RUBY
|
|
7
|
-
def m; end
|
|
8
|
-
RUBY
|
|
9
|
-
|
|
10
|
-
expect(src).to reek_of(:UncommunicativeMethodName,
|
|
11
|
-
lines: [1],
|
|
12
|
-
context: 'm',
|
|
13
|
-
message: "has the name 'm'",
|
|
14
|
-
source: 'string',
|
|
15
|
-
name: 'm')
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
describe 'default configuration' do
|
|
19
|
-
it 'reports one-word names' do
|
|
20
|
-
src = 'def a; end'
|
|
21
|
-
expect(src).to reek_of(:UncommunicativeMethodName)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
it 'reports names ending with a digit' do
|
|
25
|
-
src = 'def xyz1; end'
|
|
26
|
-
expect(src).to reek_of(:UncommunicativeMethodName)
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
it 'reports camelcased names' do
|
|
30
|
-
src = 'def aBBa; end'
|
|
31
|
-
expect(src).to reek_of(:UncommunicativeMethodName)
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
it 'does not report one-letter special characters' do
|
|
35
|
-
['+', '-', '/', '*'].each do |symbol|
|
|
36
|
-
expect("def #{symbol}; end").not_to reek_of(:UncommunicativeMethodName)
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
describe '`accept` patterns' do
|
|
42
|
-
let(:source) { 'def x; end' }
|
|
43
|
-
|
|
44
|
-
it 'make smelly names pass' do
|
|
45
|
-
pattern = /x/
|
|
46
|
-
expect(source).not_to reek_of(:UncommunicativeMethodName).with_config('accept' => pattern)
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
describe '`reject` patterns' do
|
|
51
|
-
let(:source) { 'def alfa; end' }
|
|
52
|
-
|
|
53
|
-
it 'reject smelly names' do
|
|
54
|
-
patterns = [/alf/, /lfa/]
|
|
55
|
-
patterns.each do |pattern|
|
|
56
|
-
expect(source).to reek_of(:UncommunicativeMethodName).with_config('reject' => pattern)
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
describe '.default_config' do
|
|
62
|
-
it 'merges in the default accept and reject patterns' do
|
|
63
|
-
expected = {
|
|
64
|
-
'enabled' => true,
|
|
65
|
-
'exclude' => [],
|
|
66
|
-
'reject' => [/^[a-z]$/, /[0-9]$/, /[A-Z]/],
|
|
67
|
-
'accept' => []
|
|
68
|
-
}
|
|
69
|
-
expect(described_class.default_config).to eq(expected)
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
describe '.contexts' do
|
|
74
|
-
it 'is scoped to classes and modules' do
|
|
75
|
-
expect(described_class.contexts).to eq([:def, :defs])
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
end
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
require_relative '../../spec_helper'
|
|
2
|
-
require_lib 'reek/smell_detectors/uncommunicative_module_name'
|
|
3
|
-
|
|
4
|
-
RSpec.describe Reek::SmellDetectors::UncommunicativeModuleName do
|
|
5
|
-
it 'reports the right values' do
|
|
6
|
-
src = <<-RUBY
|
|
7
|
-
class K
|
|
8
|
-
end
|
|
9
|
-
RUBY
|
|
10
|
-
|
|
11
|
-
expect(src).to reek_of(:UncommunicativeModuleName,
|
|
12
|
-
lines: [1],
|
|
13
|
-
context: 'K',
|
|
14
|
-
message: "has the name 'K'",
|
|
15
|
-
source: 'string',
|
|
16
|
-
name: 'K')
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
describe 'default configuration' do
|
|
20
|
-
['class', 'module'].each do |type|
|
|
21
|
-
it 'does not report one-word name' do
|
|
22
|
-
expect("#{type} Alfa; end").not_to reek_of(:UncommunicativeModuleName)
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
it 'reports one-letter name' do
|
|
26
|
-
expect("#{type} X; end").to reek_of(:UncommunicativeModuleName, name: 'X')
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
it 'reports name of the form "x2"' do
|
|
30
|
-
expect("#{type} X2; end").to reek_of(:UncommunicativeModuleName, name: 'X2')
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
it 'reports long name ending in a number' do
|
|
34
|
-
expect("#{type} Alfa2; end").to reek_of(:UncommunicativeModuleName, name: 'Alfa2')
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
describe '`accept` patterns' do
|
|
40
|
-
let(:source) { 'class Alfa1; end' }
|
|
41
|
-
|
|
42
|
-
it 'make smelly names pass ' do
|
|
43
|
-
patterns = [/lfa1/, /Alfa1/]
|
|
44
|
-
patterns.each do |pattern|
|
|
45
|
-
expect(source).not_to reek_of(:UncommunicativeModuleName).with_config('accept' => pattern)
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
describe '`reject` patterns' do
|
|
51
|
-
let(:source) { 'class Alfa; end' }
|
|
52
|
-
|
|
53
|
-
it 'reject smelly names' do
|
|
54
|
-
patterns = [/lfa/, /Alf/]
|
|
55
|
-
patterns.each do |pattern|
|
|
56
|
-
expect(source).to reek_of(:UncommunicativeModuleName).with_config('reject' => pattern)
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
describe '.default_config' do
|
|
62
|
-
it 'merges in the default accept and reject patterns' do
|
|
63
|
-
expected = {
|
|
64
|
-
'enabled' => true,
|
|
65
|
-
'exclude' => [],
|
|
66
|
-
'reject' => [/^.$/, /[0-9]$/],
|
|
67
|
-
'accept' => []
|
|
68
|
-
}
|
|
69
|
-
expect(described_class.default_config).to eq(expected)
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
describe '.contexts' do
|
|
74
|
-
it 'indicates that this smell is scoped to classes and modules' do
|
|
75
|
-
expect(described_class.contexts).to eq([:module, :class])
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
end
|