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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -1
- data/CONTRIBUTING.md +3 -0
- data/Dockerfile +1 -1
- data/Gemfile +6 -6
- data/lib/reek/ast/ast_node_class_map.rb +1 -1
- data/lib/reek/report/code_climate/code_climate_formatter.rb +1 -3
- data/lib/reek/smell_detectors/base_detector.rb +1 -1
- data/lib/reek/smell_warning.rb +1 -1
- data/lib/reek/source/source_locator.rb +1 -3
- data/lib/reek/version.rb +1 -1
- data/reek.gemspec +4 -1
- metadata +3 -208
- 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 -35
- 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/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 -25
- 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 -309
- 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
@@ -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
|
@@ -1,147 +0,0 @@
|
|
1
|
-
require_relative '../../spec_helper'
|
2
|
-
require_lib 'reek/smell_detectors/uncommunicative_parameter_name'
|
3
|
-
|
4
|
-
RSpec.describe Reek::SmellDetectors::UncommunicativeParameterName do
|
5
|
-
it 'reports the right values' do
|
6
|
-
src = <<-RUBY
|
7
|
-
def alfa(x)
|
8
|
-
x
|
9
|
-
end
|
10
|
-
RUBY
|
11
|
-
|
12
|
-
expect(src).to reek_of(:UncommunicativeParameterName,
|
13
|
-
lines: [1],
|
14
|
-
context: 'alfa',
|
15
|
-
message: "has the parameter name 'x'",
|
16
|
-
source: 'string',
|
17
|
-
name: 'x')
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'does count all occurences' do
|
21
|
-
src = <<-RUBY
|
22
|
-
def alfa(x, y)
|
23
|
-
[x, y]
|
24
|
-
end
|
25
|
-
RUBY
|
26
|
-
|
27
|
-
expect(src).
|
28
|
-
to reek_of(:UncommunicativeParameterName, lines: [1], name: 'x').
|
29
|
-
and reek_of(:UncommunicativeParameterName, lines: [1], name: 'y')
|
30
|
-
end
|
31
|
-
|
32
|
-
{ 'alfa.' => 'with a receiver',
|
33
|
-
'' => 'without a receiver' }.each do |host, description|
|
34
|
-
context "in a method definition #{description}" do
|
35
|
-
it 'does not report two-letter parameter names' do
|
36
|
-
src = "def #{host}bravo(ab); charlie(ab); end"
|
37
|
-
expect(src).not_to reek_of(:UncommunicativeParameterName)
|
38
|
-
end
|
39
|
-
|
40
|
-
it 'reports names of the form "x2"' do
|
41
|
-
src = "def #{host}bravo(x2) charlie(x2) end"
|
42
|
-
expect(src).to reek_of(:UncommunicativeParameterName, name: 'x2')
|
43
|
-
end
|
44
|
-
|
45
|
-
it 'reports long name ending in a number' do
|
46
|
-
src = "def #{host}bravo(param2) charlie(param2) end"
|
47
|
-
expect(src).to reek_of(:UncommunicativeParameterName, name: 'param2')
|
48
|
-
end
|
49
|
-
|
50
|
-
it 'reports unused parameters' do
|
51
|
-
src = "def #{host}bravo(x); charlie; end"
|
52
|
-
expect(src).to reek_of(:UncommunicativeParameterName)
|
53
|
-
end
|
54
|
-
|
55
|
-
it 'reports splat parameters' do
|
56
|
-
expect("def #{host}bravo(*a); charlie(a); end").
|
57
|
-
to reek_of(:UncommunicativeParameterName, name: 'a')
|
58
|
-
end
|
59
|
-
|
60
|
-
it 'reports double splat parameters' do
|
61
|
-
expect("def #{host}bravo(**a); charlie(a); end").
|
62
|
-
to reek_of(:UncommunicativeParameterName, name: 'a')
|
63
|
-
end
|
64
|
-
|
65
|
-
it 'reports block parameters' do
|
66
|
-
expect("def #{host}bravo(&a); charlie(a); end").
|
67
|
-
to reek_of(:UncommunicativeParameterName, name: 'a')
|
68
|
-
end
|
69
|
-
|
70
|
-
it 'does not report unused anonymous parameter' do
|
71
|
-
src = "def #{host}bravo(_); charlie; end"
|
72
|
-
expect(src).not_to reek_of(:UncommunicativeParameterName)
|
73
|
-
end
|
74
|
-
|
75
|
-
it 'reports used anonymous parameter' do
|
76
|
-
src = "def #{host}bravo(_); charlie(_) end"
|
77
|
-
expect(src).to reek_of(:UncommunicativeParameterName, name: '_')
|
78
|
-
end
|
79
|
-
|
80
|
-
it 'reports used parameters marked as unused' do
|
81
|
-
src = "def #{host}bravo(_unused) charlie(_unused) end"
|
82
|
-
expect(src).to reek_of(:UncommunicativeParameterName, name: '_unused')
|
83
|
-
end
|
84
|
-
|
85
|
-
it 'does not report anonymous splat' do
|
86
|
-
expect("def #{host}bravo(*); end").not_to reek_of(:UncommunicativeParameterName)
|
87
|
-
end
|
88
|
-
|
89
|
-
it 'does not report anonymous double splat' do
|
90
|
-
expect("def #{host}bravo(**); end").not_to reek_of(:UncommunicativeParameterName)
|
91
|
-
end
|
92
|
-
|
93
|
-
it 'reports names inside array decomposition' do
|
94
|
-
src = "def #{host}bravo((x, charlie)) delta(x, charlie) end"
|
95
|
-
expect(src).to reek_of(:UncommunicativeParameterName,
|
96
|
-
name: 'x')
|
97
|
-
end
|
98
|
-
|
99
|
-
it 'reports names inside nested array decomposition' do
|
100
|
-
src = "def #{host}bravo((charlie, (delta, x))) echo(charlie, x) end"
|
101
|
-
expect(src).to reek_of(:UncommunicativeParameterName,
|
102
|
-
name: 'x')
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
describe '`accept` patterns' do
|
108
|
-
let(:source) { 'def alfa(bar2); charlie(bar2); end' }
|
109
|
-
|
110
|
-
it 'make smelly names pass' do
|
111
|
-
patterns = [/bar2/, /ar2/]
|
112
|
-
patterns.each do |pattern|
|
113
|
-
expect(source).not_to reek_of(:UncommunicativeParameterName).with_config('accept' => pattern)
|
114
|
-
end
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
describe '`reject` patterns' do
|
119
|
-
let(:source) { 'def alfa(bravo); charlie(bravo); end' }
|
120
|
-
|
121
|
-
it 'reject smelly names' do
|
122
|
-
patterns = [/brav/, /ravo/]
|
123
|
-
patterns.each do |pattern|
|
124
|
-
expect(source).to reek_of(:UncommunicativeParameterName).with_config('reject' => pattern)
|
125
|
-
end
|
126
|
-
end
|
127
|
-
end
|
128
|
-
|
129
|
-
describe '.default_config' do
|
130
|
-
it 'merges in the default accept and reject patterns' do
|
131
|
-
expected = {
|
132
|
-
'enabled' => true,
|
133
|
-
'exclude' => [],
|
134
|
-
'reject' => [/^.$/, /[0-9]$/, /[A-Z]/, /^_/],
|
135
|
-
'accept' => []
|
136
|
-
}
|
137
|
-
|
138
|
-
expect(described_class.default_config).to eq(expected)
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
describe '.contexts' do
|
143
|
-
it 'indicates that this smell is scoped to method definitions' do
|
144
|
-
expect(described_class.contexts).to eq([:def, :defs])
|
145
|
-
end
|
146
|
-
end
|
147
|
-
end
|