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,24 +0,0 @@
|
|
1
|
-
require_relative '../../spec_helper'
|
2
|
-
require_lib 'reek/examiner'
|
3
|
-
require_lib 'reek/report/xml_report'
|
4
|
-
|
5
|
-
RSpec.describe Reek::Report::XMLReport do
|
6
|
-
let(:xml_report) { described_class.new }
|
7
|
-
|
8
|
-
context 'with an empty source' do
|
9
|
-
it 'prints empty checkstyle XML' do
|
10
|
-
xml_report.add_examiner Reek::Examiner.new('')
|
11
|
-
xml = "<?xml version='1.0'?>\n<checkstyle/>\n"
|
12
|
-
expect { xml_report.show }.to output(xml).to_stdout
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
context 'with a source with violations' do
|
17
|
-
it 'prints non-empty checkstyle XML' do
|
18
|
-
xml_report.add_examiner Reek::Examiner.new(SMELLY_FILE)
|
19
|
-
xml = SAMPLES_DIR.join('checkstyle.xml').read
|
20
|
-
xml = xml.gsub(SMELLY_FILE.to_s, SMELLY_FILE.expand_path.to_s)
|
21
|
-
expect { xml_report.show }.to output(xml).to_stdout
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,55 +0,0 @@
|
|
1
|
-
require_relative '../../spec_helper'
|
2
|
-
require_lib 'reek/examiner'
|
3
|
-
require_lib 'reek/report/yaml_report'
|
4
|
-
|
5
|
-
require 'yaml'
|
6
|
-
require 'stringio'
|
7
|
-
|
8
|
-
RSpec.describe Reek::Report::YAMLReport 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 yaml' do
|
21
|
-
expect { instance.show }.to output(/^--- \[\]\n.*$/).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 yaml' do
|
29
|
-
out = StringIO.new
|
30
|
-
instance.show(out)
|
31
|
-
out.rewind
|
32
|
-
result = YAML.safe_load(out.read)
|
33
|
-
expected = YAML.safe_load <<~YAML
|
34
|
-
---
|
35
|
-
- context: "simple"
|
36
|
-
lines:
|
37
|
-
- 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
|
-
- context: "simple"
|
44
|
-
lines:
|
45
|
-
- 1
|
46
|
-
message: "doesn't depend on instance state (maybe move it to another class?)"
|
47
|
-
smell_type: "UtilityFunction"
|
48
|
-
source: "string"
|
49
|
-
documentation_link: "https://github.com/troessner/reek/blob/v#{Reek::Version::STRING}/docs/Utility-Function.md"
|
50
|
-
YAML
|
51
|
-
|
52
|
-
expect(result).to eq expected
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
data/spec/reek/report_spec.rb
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
require_relative '../spec_helper'
|
2
|
-
require_lib 'reek/report'
|
3
|
-
|
4
|
-
RSpec.describe Reek::Report do
|
5
|
-
describe '.report_class' do
|
6
|
-
it 'returns the correct class' do
|
7
|
-
expect(described_class.report_class(:text)).to eq Reek::Report::TextReport
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
describe '.location_formatter' do
|
12
|
-
it 'returns the correct class' do
|
13
|
-
expect(described_class.location_formatter(:plain)).to eq Reek::Report::BlankLocationFormatter
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
describe '.heading_formatter' do
|
18
|
-
it 'returns the correct class' do
|
19
|
-
expect(described_class.heading_formatter(:quiet)).to eq Reek::Report::QuietHeadingFormatter
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
describe '.warning_formatter_class' do
|
24
|
-
it 'returns the correct class' do
|
25
|
-
expect(described_class.warning_formatter_class(:simple)).to eq Reek::Report::SimpleWarningFormatter
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
@@ -1,56 +0,0 @@
|
|
1
|
-
require_relative '../spec_helper'
|
2
|
-
require_lib 'reek/smell_configuration'
|
3
|
-
|
4
|
-
RSpec.describe Reek::SmellConfiguration do
|
5
|
-
context 'when overriding default configs' do
|
6
|
-
let(:base_config) do
|
7
|
-
{
|
8
|
-
'accept' => ['_'],
|
9
|
-
'enabled' => true,
|
10
|
-
'exclude' => [],
|
11
|
-
'reject' => [/^.$/, /[0-9]$/, /[A-Z]/]
|
12
|
-
}
|
13
|
-
end
|
14
|
-
|
15
|
-
let(:smell_config) { described_class.new(base_config) }
|
16
|
-
|
17
|
-
it { expect(smell_config.merge({})).to eq(base_config) }
|
18
|
-
it { expect(smell_config.merge('enabled' => true)).to eq(base_config) }
|
19
|
-
it { expect(smell_config.merge('exclude' => [])).to eq(base_config) }
|
20
|
-
it { expect(smell_config.merge('accept' => ['_'])).to eq(base_config) }
|
21
|
-
|
22
|
-
it do
|
23
|
-
updated = smell_config.merge('reject' => [/^.$/, /[0-9]$/, /[A-Z]/])
|
24
|
-
expect(updated).to eq(base_config)
|
25
|
-
end
|
26
|
-
|
27
|
-
it do
|
28
|
-
updated = smell_config.merge('accept' => ['_'], 'enabled' => true)
|
29
|
-
expect(updated).to eq(base_config)
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'overrides single values' do
|
33
|
-
updated = smell_config.merge('enabled' => false)
|
34
|
-
expect(updated).to eq('accept' => ['_'],
|
35
|
-
'enabled' => false,
|
36
|
-
'exclude' => [],
|
37
|
-
'reject' => [/^.$/, /[0-9]$/, /[A-Z]/])
|
38
|
-
end
|
39
|
-
|
40
|
-
it 'overrides arrays of values' do
|
41
|
-
updated = smell_config.merge('reject' => [/^.$/, /[3-9]$/])
|
42
|
-
expect(updated).to eq('accept' => ['_'],
|
43
|
-
'enabled' => true,
|
44
|
-
'exclude' => [],
|
45
|
-
'reject' => [/^.$/, /[3-9]$/])
|
46
|
-
end
|
47
|
-
|
48
|
-
it 'overrides multiple values' do
|
49
|
-
updated = smell_config.merge('accept' => [/[A-Z]$/], 'enabled' => false)
|
50
|
-
expect(updated).to eq('accept' => [/[A-Z]$/],
|
51
|
-
'enabled' => false,
|
52
|
-
'exclude' => [],
|
53
|
-
'reject' => [/^.$/, /[0-9]$/, /[A-Z]/])
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
@@ -1,197 +0,0 @@
|
|
1
|
-
require_relative '../../spec_helper'
|
2
|
-
require_lib 'reek/smell_detectors/attribute'
|
3
|
-
|
4
|
-
RSpec.describe Reek::SmellDetectors::Attribute do
|
5
|
-
it 'reports the right values' do
|
6
|
-
src = <<-RUBY
|
7
|
-
class Alfa
|
8
|
-
attr_writer :bravo
|
9
|
-
end
|
10
|
-
RUBY
|
11
|
-
|
12
|
-
expect(src).to reek_of(:Attribute,
|
13
|
-
lines: [2],
|
14
|
-
context: 'Alfa#bravo',
|
15
|
-
message: 'is a writable attribute')
|
16
|
-
end
|
17
|
-
|
18
|
-
it 'does count all occurences' do
|
19
|
-
src = <<-RUBY
|
20
|
-
class Alfa
|
21
|
-
attr_writer :bravo
|
22
|
-
attr_writer :charlie
|
23
|
-
end
|
24
|
-
RUBY
|
25
|
-
|
26
|
-
expect(src).
|
27
|
-
to reek_of(:Attribute, lines: [2], context: 'Alfa#bravo').
|
28
|
-
and reek_of(:Attribute, lines: [3], context: 'Alfa#charlie')
|
29
|
-
end
|
30
|
-
|
31
|
-
it 'records nothing with no attributes' do
|
32
|
-
src = <<-RUBY
|
33
|
-
class Alfa
|
34
|
-
end
|
35
|
-
RUBY
|
36
|
-
|
37
|
-
expect(src).not_to reek_of(:Attribute)
|
38
|
-
end
|
39
|
-
|
40
|
-
context 'with attributes' do
|
41
|
-
it 'records nothing for attribute readers' do
|
42
|
-
src = <<-RUBY
|
43
|
-
class Alfa
|
44
|
-
attr :bravo
|
45
|
-
attr_reader :charlie
|
46
|
-
end
|
47
|
-
RUBY
|
48
|
-
|
49
|
-
expect(src).not_to reek_of(:Attribute)
|
50
|
-
end
|
51
|
-
|
52
|
-
it 'records writer attribute' do
|
53
|
-
src = <<-RUBY
|
54
|
-
class Alfa
|
55
|
-
attr_writer :bravo
|
56
|
-
end
|
57
|
-
RUBY
|
58
|
-
|
59
|
-
expect(src).to reek_of(:Attribute, context: 'Alfa#bravo')
|
60
|
-
end
|
61
|
-
|
62
|
-
it 'does not record writer attribute if suppressed with a preceding code comment' do
|
63
|
-
src = <<-RUBY
|
64
|
-
class Alfa
|
65
|
-
# :reek:Attribute
|
66
|
-
attr_writer :bravo
|
67
|
-
end
|
68
|
-
RUBY
|
69
|
-
|
70
|
-
expect(src).not_to reek_of(:Attribute)
|
71
|
-
end
|
72
|
-
|
73
|
-
it 'records attr_writer attribute in a module' do
|
74
|
-
src = <<-RUBY
|
75
|
-
module Mod
|
76
|
-
attr_writer :bravo
|
77
|
-
end
|
78
|
-
RUBY
|
79
|
-
|
80
|
-
expect(src).to reek_of(:Attribute)
|
81
|
-
end
|
82
|
-
|
83
|
-
it 'records accessor attribute' do
|
84
|
-
src = <<-RUBY
|
85
|
-
class Alfa
|
86
|
-
attr_accessor :bravo
|
87
|
-
end
|
88
|
-
RUBY
|
89
|
-
|
90
|
-
expect(src).to reek_of(:Attribute)
|
91
|
-
end
|
92
|
-
|
93
|
-
it 'records attr defining a writer' do
|
94
|
-
src = <<-RUBY
|
95
|
-
class Alfa
|
96
|
-
attr :bravo, true
|
97
|
-
end
|
98
|
-
RUBY
|
99
|
-
|
100
|
-
expect(src).to reek_of(:Attribute)
|
101
|
-
end
|
102
|
-
|
103
|
-
it "doesn't record protected attributes" do
|
104
|
-
src = <<-RUBY
|
105
|
-
class Alfa
|
106
|
-
protected
|
107
|
-
attr_writer :alfa
|
108
|
-
attr_accessor :bravo
|
109
|
-
attr :charlie
|
110
|
-
attr :delta, true
|
111
|
-
attr_reader :echo
|
112
|
-
end
|
113
|
-
RUBY
|
114
|
-
|
115
|
-
expect(src).not_to reek_of(:Attribute)
|
116
|
-
end
|
117
|
-
|
118
|
-
it "doesn't record private attributes" do
|
119
|
-
src = <<-RUBY
|
120
|
-
class Alfa
|
121
|
-
private
|
122
|
-
attr_writer :alfa
|
123
|
-
attr_accessor :bravo
|
124
|
-
attr :charlie
|
125
|
-
attr :delta, true
|
126
|
-
attr_reader :echo
|
127
|
-
end
|
128
|
-
RUBY
|
129
|
-
|
130
|
-
expect(src).not_to reek_of(:Attribute)
|
131
|
-
end
|
132
|
-
|
133
|
-
it 'records attr_writer defined in public section' do
|
134
|
-
src = <<-RUBY
|
135
|
-
class Alfa
|
136
|
-
private
|
137
|
-
public
|
138
|
-
attr_writer :bravo
|
139
|
-
end
|
140
|
-
RUBY
|
141
|
-
|
142
|
-
expect(src).to reek_of(:Attribute)
|
143
|
-
end
|
144
|
-
|
145
|
-
it 'records attr_writer after switching visbility to public' do
|
146
|
-
src = <<-RUBY
|
147
|
-
class Alfa
|
148
|
-
private
|
149
|
-
attr_writer :bravo
|
150
|
-
public :bravo
|
151
|
-
end
|
152
|
-
RUBY
|
153
|
-
|
154
|
-
expect(src).to reek_of(:Attribute)
|
155
|
-
end
|
156
|
-
|
157
|
-
it 'resets visibility in new contexts' do
|
158
|
-
src = <<-RUBY
|
159
|
-
class Alfa
|
160
|
-
private
|
161
|
-
attr_writer :bravo
|
162
|
-
end
|
163
|
-
|
164
|
-
class Charlie
|
165
|
-
attr_writer :delta
|
166
|
-
end
|
167
|
-
RUBY
|
168
|
-
|
169
|
-
expect(src).to reek_of(:Attribute, context: 'Charlie#delta')
|
170
|
-
end
|
171
|
-
|
172
|
-
it 'records attr_writer defining a class attribute' do
|
173
|
-
src = <<-RUBY
|
174
|
-
class Alfa
|
175
|
-
class << self
|
176
|
-
attr_writer :bravo
|
177
|
-
end
|
178
|
-
end
|
179
|
-
RUBY
|
180
|
-
|
181
|
-
expect(src).to reek_of(:Attribute)
|
182
|
-
end
|
183
|
-
|
184
|
-
it 'does not record private class attributes' do
|
185
|
-
src = <<-RUBY
|
186
|
-
class Alfa
|
187
|
-
class << self
|
188
|
-
private
|
189
|
-
attr_writer :bravo
|
190
|
-
end
|
191
|
-
end
|
192
|
-
RUBY
|
193
|
-
|
194
|
-
expect(src).not_to reek_of(:Attribute)
|
195
|
-
end
|
196
|
-
end
|
197
|
-
end
|
@@ -1,50 +0,0 @@
|
|
1
|
-
require_relative '../../spec_helper'
|
2
|
-
require_lib 'reek/smell_detectors/base_detector'
|
3
|
-
require_lib 'reek/smell_detectors/duplicate_method_call'
|
4
|
-
|
5
|
-
RSpec.describe Reek::SmellDetectors::BaseDetector do
|
6
|
-
describe '.todo_configuration_for' do
|
7
|
-
it 'returns exclusion configuration for the given smells' do
|
8
|
-
smell = build_smell_warning(smell_type: 'Foo', context: 'Foo#bar')
|
9
|
-
result = described_class.todo_configuration_for([smell])
|
10
|
-
expect(result).to eq('BaseDetector' => { 'exclude' => ['Foo#bar'] })
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'merges identical contexts' do
|
14
|
-
smell = build_smell_warning(smell_type: 'Foo', context: 'Foo#bar')
|
15
|
-
result = described_class.todo_configuration_for([smell, smell])
|
16
|
-
expect(result).to eq('BaseDetector' => { 'exclude' => ['Foo#bar'] })
|
17
|
-
end
|
18
|
-
|
19
|
-
context 'with default exclusions present' do
|
20
|
-
let(:subclass) { Reek::SmellDetectors::TooManyStatements }
|
21
|
-
|
22
|
-
it 'includes default exclusions' do
|
23
|
-
smell = build_smell_warning(smell_type: 'TooManyStatements', context: 'Foo#bar')
|
24
|
-
result = subclass.todo_configuration_for([smell])
|
25
|
-
|
26
|
-
aggregate_failures do
|
27
|
-
expect(subclass.default_config['exclude']).to eq ['initialize']
|
28
|
-
expect(result).to eq('TooManyStatements' => { 'exclude' => ['initialize', 'Foo#bar'] })
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
describe '.to_detector' do
|
35
|
-
it 'returns the right detector' do
|
36
|
-
expect(described_class.to_detector('DuplicateMethodCall')).to eq(Reek::SmellDetectors::DuplicateMethodCall)
|
37
|
-
end
|
38
|
-
|
39
|
-
it 'raise NameError for an invalid detector name' do
|
40
|
-
expect { described_class.to_detector('Unknown') }.to raise_error(NameError)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
describe '.configuration_keys' do
|
45
|
-
it 'returns the right keys' do
|
46
|
-
expected_keys = Reek::SmellDetectors::DuplicateMethodCall.configuration_keys.to_a
|
47
|
-
expect(expected_keys).to eq([:enabled, :exclude, :max_calls, :allow_calls])
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
@@ -1,93 +0,0 @@
|
|
1
|
-
require_relative '../../spec_helper'
|
2
|
-
require_lib 'reek/smell_detectors/boolean_parameter'
|
3
|
-
|
4
|
-
RSpec.describe Reek::SmellDetectors::BooleanParameter do
|
5
|
-
it 'reports the right values' do
|
6
|
-
src = <<-RUBY
|
7
|
-
def alfa(bravo = true)
|
8
|
-
end
|
9
|
-
RUBY
|
10
|
-
|
11
|
-
expect(src).to reek_of(:BooleanParameter,
|
12
|
-
lines: [1],
|
13
|
-
context: 'alfa',
|
14
|
-
message: "has boolean parameter 'bravo'",
|
15
|
-
source: 'string',
|
16
|
-
parameter: 'bravo')
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'does count all occurences' do
|
20
|
-
src = <<-RUBY
|
21
|
-
def alfa(bravo = true, charlie = true)
|
22
|
-
end
|
23
|
-
RUBY
|
24
|
-
|
25
|
-
expect(src).
|
26
|
-
to reek_of(:BooleanParameter, lines: [1], context: 'alfa', parameter: 'bravo').
|
27
|
-
and reek_of(:BooleanParameter, lines: [1], context: 'alfa', parameter: 'charlie')
|
28
|
-
end
|
29
|
-
|
30
|
-
context 'when examining an instance method' do
|
31
|
-
it 'reports a parameter defaulted to false' do
|
32
|
-
src = 'def alfa(bravo = false) end'
|
33
|
-
expect(src).to reek_of(:BooleanParameter)
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'reports two parameters defaulted to booleans in a mixed parameter list' do
|
37
|
-
src = 'def alfa(bravo, charlie = true, delta = false, &echo) end'
|
38
|
-
|
39
|
-
expect(src).to reek_of(:BooleanParameter, parameter: 'charlie').
|
40
|
-
and reek_of(:BooleanParameter, parameter: 'delta').
|
41
|
-
and not_reek_of(:BooleanParameter, parameter: 'bravo').
|
42
|
-
and not_reek_of(:BooleanParameter, parameter: 'echo')
|
43
|
-
end
|
44
|
-
|
45
|
-
it 'reports keyword parameters defaulted to booleans' do
|
46
|
-
src = 'def alfa(bravo: true, charlie: false) end'
|
47
|
-
expect(src).
|
48
|
-
to reek_of(:BooleanParameter, parameter: 'bravo').
|
49
|
-
and reek_of(:BooleanParameter, parameter: 'charlie')
|
50
|
-
end
|
51
|
-
|
52
|
-
it 'does not report regular parameters' do
|
53
|
-
src = 'def alfa(bravo, charlie) end'
|
54
|
-
expect(src).not_to reek_of(:BooleanParameter)
|
55
|
-
end
|
56
|
-
|
57
|
-
it 'does not report array decomposition parameters' do
|
58
|
-
src = 'def alfa((bravo, charlie)) end'
|
59
|
-
expect(src).not_to reek_of(:BooleanParameter)
|
60
|
-
end
|
61
|
-
|
62
|
-
it 'does not report keyword parameters with no default' do
|
63
|
-
src = 'def alfa(bravo:, charlie:) end'
|
64
|
-
expect(src).not_to reek_of(:BooleanParameter)
|
65
|
-
end
|
66
|
-
|
67
|
-
it 'does not report keyword parameters with non-boolean default' do
|
68
|
-
src = 'def alfa(bravo: 42, charlie: "32") end'
|
69
|
-
expect(src).not_to reek_of(:BooleanParameter)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
context 'when examining a singleton method' do
|
74
|
-
it 'reports a parameter defaulted to true' do
|
75
|
-
src = 'def self.alfa(bravo = true) end'
|
76
|
-
expect(src).to reek_of(:BooleanParameter)
|
77
|
-
end
|
78
|
-
|
79
|
-
it 'reports a parameter defaulted to false' do
|
80
|
-
src = 'def self.alfa(bravo = false) end'
|
81
|
-
expect(src).to reek_of(:BooleanParameter)
|
82
|
-
end
|
83
|
-
|
84
|
-
it 'reports two parameters defaulted to booleans' do
|
85
|
-
src = 'def self.alfa(bravo, charlie = true, delta = false, &echo) end'
|
86
|
-
|
87
|
-
expect(src).to reek_of(:BooleanParameter, parameter: 'charlie').
|
88
|
-
and reek_of(:BooleanParameter, parameter: 'delta').
|
89
|
-
and not_reek_of(:BooleanParameter, parameter: 'bravo').
|
90
|
-
and not_reek_of(:BooleanParameter, parameter: 'echo')
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|