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,116 +0,0 @@
|
|
1
|
-
Feature: Well formed source comments are handled properly
|
2
|
-
As a developer I want to be able to have a fine-grained control
|
3
|
-
over how Reek handles smells via source code comments.
|
4
|
-
|
5
|
-
Scenario: Disable smell detector implicitly
|
6
|
-
Given a file named "disable_detector_implicitly.rb" with:
|
7
|
-
"""
|
8
|
-
# Test class
|
9
|
-
# :reek:TooManyInstanceVariables
|
10
|
-
class Alfa
|
11
|
-
def initialize
|
12
|
-
@charlie = @delta = @echo = @foxtrot = @hotel = 1
|
13
|
-
end
|
14
|
-
end
|
15
|
-
"""
|
16
|
-
When I run reek disable_detector_implicitly.rb
|
17
|
-
Then it succeeds
|
18
|
-
And it reports nothing
|
19
|
-
|
20
|
-
Scenario: Disable smell detector explicitly
|
21
|
-
Given a file named "disable_detector_explicitly.rb" with:
|
22
|
-
"""
|
23
|
-
# Test class
|
24
|
-
# :reek:TooManyInstanceVariables { enabled: false }
|
25
|
-
class Alfa
|
26
|
-
def initialize
|
27
|
-
@charlie = @delta = @echo = @foxtrot = @hotel = 1
|
28
|
-
end
|
29
|
-
end
|
30
|
-
"""
|
31
|
-
When I run reek disable_detector_explicitly.rb
|
32
|
-
Then it succeeds
|
33
|
-
And it reports nothing
|
34
|
-
|
35
|
-
Scenario: Enable smell detector explicitly
|
36
|
-
Given a file named "enable_detector_explicitly.rb" with:
|
37
|
-
"""
|
38
|
-
# Test class
|
39
|
-
# :reek:TooManyInstanceVariables { enabled: true }
|
40
|
-
class Alfa
|
41
|
-
def initialize
|
42
|
-
@charlie = @delta = @echo = @foxtrot = @hotel = 1
|
43
|
-
end
|
44
|
-
end
|
45
|
-
"""
|
46
|
-
When I run reek enable_detector_explicitly.rb
|
47
|
-
Then the exit status indicates smells
|
48
|
-
And it reports:
|
49
|
-
"""
|
50
|
-
enable_detector_explicitly.rb -- 1 warning:
|
51
|
-
[3]:TooManyInstanceVariables: Alfa has at least 5 instance variables
|
52
|
-
"""
|
53
|
-
|
54
|
-
Scenario: Configure smell detector with the basic exclude option as string
|
55
|
-
Given a file named "configure_exclude_option.rb" with:
|
56
|
-
"""
|
57
|
-
# Test class
|
58
|
-
# :reek:TooManyInstanceVariables { exclude: '@hotel' }
|
59
|
-
class Alfa
|
60
|
-
def initialize
|
61
|
-
@charlie = @delta = @echo = @foxtrot = @hotel = 1
|
62
|
-
end
|
63
|
-
end
|
64
|
-
"""
|
65
|
-
When I run reek configure_exclude_option.rb
|
66
|
-
Then it succeeds
|
67
|
-
And it reports nothing
|
68
|
-
|
69
|
-
Scenario: Configure smell detector with the basic exclude option as regex
|
70
|
-
Given a file named "configure_exclude_option.rb" with:
|
71
|
-
"""
|
72
|
-
# Test class
|
73
|
-
# :reek:TooManyInstanceVariables { exclude: /hotel/ }
|
74
|
-
class Alfa
|
75
|
-
def initialize
|
76
|
-
@charlie = @delta = @echo = @foxtrot = @hotel = 1
|
77
|
-
end
|
78
|
-
end
|
79
|
-
"""
|
80
|
-
When I run reek configure_exclude_option.rb
|
81
|
-
Then it succeeds
|
82
|
-
And it reports nothing
|
83
|
-
|
84
|
-
Scenario: Configure smell detector with a detector specific option that silences it
|
85
|
-
Given a file named "configure_detector_specific_option.rb" with:
|
86
|
-
"""
|
87
|
-
# Test class
|
88
|
-
# :reek:TooManyInstanceVariables { max_instance_variables: 5 }
|
89
|
-
class Alfa
|
90
|
-
def initialize
|
91
|
-
@charlie = @delta = @echo = @foxtrot = @hotel = 1
|
92
|
-
end
|
93
|
-
end
|
94
|
-
"""
|
95
|
-
When I run reek configure_detector_specific_option.rb
|
96
|
-
Then it succeeds
|
97
|
-
And it reports nothing
|
98
|
-
|
99
|
-
Scenario: Configure smell detector with a detector specific option that makes it report again
|
100
|
-
Given a file named "configure_detector_specific_option.rb" with:
|
101
|
-
"""
|
102
|
-
# Test class
|
103
|
-
# :reek:TooManyInstanceVariables { max_instance_variables: 2 }
|
104
|
-
class Alfa
|
105
|
-
def initialize
|
106
|
-
@charlie = @delta = @echo = 1
|
107
|
-
end
|
108
|
-
end
|
109
|
-
"""
|
110
|
-
When I run reek configure_detector_specific_option.rb
|
111
|
-
Then the exit status indicates smells
|
112
|
-
And it reports:
|
113
|
-
"""
|
114
|
-
configure_detector_specific_option.rb -- 1 warning:
|
115
|
-
[3]:TooManyInstanceVariables: Alfa has at least 3 instance variables
|
116
|
-
"""
|
data/features/locales.feature
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
Feature: Handling different locales
|
2
|
-
In order to work in a variety of environments
|
3
|
-
As a developer
|
4
|
-
I want Reek to work properly in any locale
|
5
|
-
|
6
|
-
Scenario: Running Reek in an UTF-8 locale
|
7
|
-
Given I set the environment variable "LANG" to "en_US.utf8"
|
8
|
-
And a file "konnichiwa.rb" with:
|
9
|
-
"""
|
10
|
-
puts 'こんにちは世界'
|
11
|
-
"""
|
12
|
-
When I run reek -V konnichiwa.rb
|
13
|
-
Then it succeeds
|
14
|
-
And it reports no errors
|
15
|
-
And it reports:
|
16
|
-
"""
|
17
|
-
konnichiwa.rb -- 0 warnings
|
18
|
-
"""
|
19
|
-
|
20
|
-
Scenario: Running Reek in the POSIX locale
|
21
|
-
Given I set the environment variable "LANG" to "POSIX"
|
22
|
-
And a file "konnichiwa.rb" with:
|
23
|
-
"""
|
24
|
-
puts 'こんにちは世界'
|
25
|
-
"""
|
26
|
-
When I run reek -V konnichiwa.rb
|
27
|
-
Then it succeeds
|
28
|
-
And it reports no errors
|
29
|
-
And it reports:
|
30
|
-
"""
|
31
|
-
konnichiwa.rb -- 0 warnings
|
32
|
-
"""
|
@@ -1,41 +0,0 @@
|
|
1
|
-
Feature: Using Reek programmatically
|
2
|
-
In order to use Reek from inside my program
|
3
|
-
As a developer
|
4
|
-
I want to be able to use its classes
|
5
|
-
|
6
|
-
Scenario: Accessing smells found by an examiner
|
7
|
-
Given the smelly file 'smelly.rb'
|
8
|
-
And a file named "examine.rb" with:
|
9
|
-
"""
|
10
|
-
require 'reek'
|
11
|
-
examiner = Reek::Examiner.new(File.new('smelly.rb'))
|
12
|
-
examiner.smells.each do |smell|
|
13
|
-
puts smell.message
|
14
|
-
end
|
15
|
-
"""
|
16
|
-
When I run `ruby examine.rb`
|
17
|
-
Then it reports no errors
|
18
|
-
And it reports:
|
19
|
-
"""
|
20
|
-
has the name 'x'
|
21
|
-
has the variable name 'y'
|
22
|
-
"""
|
23
|
-
|
24
|
-
Scenario: Using Reek's built-in report classes
|
25
|
-
Given the smelly file 'smelly.rb'
|
26
|
-
And a file named "examine.rb" with:
|
27
|
-
"""
|
28
|
-
require 'reek'
|
29
|
-
examiner = Reek::Examiner.new(File.new('smelly.rb'))
|
30
|
-
report = Reek::Report::TextReport.new
|
31
|
-
report.add_examiner examiner
|
32
|
-
report.show
|
33
|
-
"""
|
34
|
-
When I run `ruby examine.rb`
|
35
|
-
Then it reports no errors
|
36
|
-
And it reports:
|
37
|
-
"""
|
38
|
-
smelly.rb -- 2 warnings:
|
39
|
-
UncommunicativeMethodName: Smelly#x has the name 'x'
|
40
|
-
UncommunicativeVariableName: Smelly#x has the variable name 'y'
|
41
|
-
"""
|
@@ -1,138 +0,0 @@
|
|
1
|
-
Feature: Reek can be driven through its Task
|
2
|
-
Reek provides an easy way to integrate its use into Rakefiles,
|
3
|
-
via the Task class. These scenarios test its various options.
|
4
|
-
|
5
|
-
Scenario: source_files points at the desired files
|
6
|
-
Given the smelly file 'smelly.rb'
|
7
|
-
And a file "Rakefile" with:
|
8
|
-
"""
|
9
|
-
require 'reek/rake/task'
|
10
|
-
|
11
|
-
Reek::Rake::Task.new do |t|
|
12
|
-
t.source_files = 'smelly.rb'
|
13
|
-
t.reek_opts = '--no-color --no-documentation'
|
14
|
-
end
|
15
|
-
"""
|
16
|
-
When I run `rake reek`
|
17
|
-
Then the exit status indicates an error
|
18
|
-
And it reports:
|
19
|
-
"""
|
20
|
-
smelly.rb -- 2 warnings:
|
21
|
-
[4]:UncommunicativeMethodName: Smelly#x has the name 'x'
|
22
|
-
[5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
|
23
|
-
"""
|
24
|
-
|
25
|
-
Scenario: source_files using a FileList instead of a String
|
26
|
-
Given the smelly file 'smelly.rb'
|
27
|
-
And a file "Rakefile" with:
|
28
|
-
"""
|
29
|
-
require 'reek/rake/task'
|
30
|
-
|
31
|
-
Reek::Rake::Task.new do |t|
|
32
|
-
t.source_files = FileList['smelly.*']
|
33
|
-
t.reek_opts = '--no-color --no-documentation'
|
34
|
-
end
|
35
|
-
"""
|
36
|
-
When I run `rake reek`
|
37
|
-
Then the exit status indicates an error
|
38
|
-
And it reports:
|
39
|
-
"""
|
40
|
-
smelly.rb -- 2 warnings:
|
41
|
-
[4]:UncommunicativeMethodName: Smelly#x has the name 'x'
|
42
|
-
[5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
|
43
|
-
"""
|
44
|
-
|
45
|
-
Scenario: name changes the task name
|
46
|
-
Given the smelly file 'smelly.rb'
|
47
|
-
And a file "Rakefile" with:
|
48
|
-
"""
|
49
|
-
require 'reek/rake/task'
|
50
|
-
|
51
|
-
Reek::Rake::Task.new('silky') do |t|
|
52
|
-
t.source_files = 'smelly.rb'
|
53
|
-
t.reek_opts = '--no-color --no-documentation'
|
54
|
-
end
|
55
|
-
"""
|
56
|
-
When I run `rake silky`
|
57
|
-
Then the exit status indicates an error
|
58
|
-
And it reports:
|
59
|
-
"""
|
60
|
-
smelly.rb -- 2 warnings:
|
61
|
-
[4]:UncommunicativeMethodName: Smelly#x has the name 'x'
|
62
|
-
[5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
|
63
|
-
"""
|
64
|
-
|
65
|
-
Scenario: verbose prints the reek command
|
66
|
-
Given the smelly file 'smelly.rb'
|
67
|
-
And a file "Rakefile" with:
|
68
|
-
"""
|
69
|
-
require 'reek/rake/task'
|
70
|
-
|
71
|
-
Reek::Rake::Task.new do |t|
|
72
|
-
t.source_files = 'smelly.rb'
|
73
|
-
t.verbose = true
|
74
|
-
end
|
75
|
-
"""
|
76
|
-
When I run `rake reek`
|
77
|
-
Then the exit status indicates an error
|
78
|
-
And stdout includes "Running 'reek' rake command"
|
79
|
-
|
80
|
-
Scenario: fail_on_error can hide the error status
|
81
|
-
Given the smelly file 'smelly.rb'
|
82
|
-
And a file "Rakefile" with:
|
83
|
-
"""
|
84
|
-
require 'reek/rake/task'
|
85
|
-
|
86
|
-
Reek::Rake::Task.new do |t|
|
87
|
-
t.fail_on_error = false
|
88
|
-
t.source_files = 'smelly.rb'
|
89
|
-
t.reek_opts = '--no-color --no-documentation'
|
90
|
-
end
|
91
|
-
"""
|
92
|
-
When I run `rake reek`
|
93
|
-
Then it reports no errors
|
94
|
-
And it succeeds
|
95
|
-
And it reports:
|
96
|
-
"""
|
97
|
-
smelly.rb -- 2 warnings:
|
98
|
-
[4]:UncommunicativeMethodName: Smelly#x has the name 'x'
|
99
|
-
[5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
|
100
|
-
"""
|
101
|
-
|
102
|
-
Scenario: can be configured with config_file
|
103
|
-
Given the smelly file 'smelly.rb'
|
104
|
-
And a configuration file 'full_mask.reek'
|
105
|
-
And a file "Rakefile" with:
|
106
|
-
"""
|
107
|
-
require 'reek/rake/task'
|
108
|
-
|
109
|
-
Reek::Rake::Task.new do |t|
|
110
|
-
t.config_file = 'full_mask.reek'
|
111
|
-
t.source_files = 'smelly.rb'
|
112
|
-
end
|
113
|
-
"""
|
114
|
-
When I run `rake reek`
|
115
|
-
Then it succeeds
|
116
|
-
And it reports nothing
|
117
|
-
|
118
|
-
Scenario: REEK_SRC overrides the files to check
|
119
|
-
Given the smelly file 'smelly.rb'
|
120
|
-
And the clean file "clean.rb"
|
121
|
-
And a file "Rakefile" with:
|
122
|
-
"""
|
123
|
-
require 'reek/rake/task'
|
124
|
-
|
125
|
-
Reek::Rake::Task.new do |t|
|
126
|
-
t.source_files = 'clean.rb'
|
127
|
-
t.reek_opts = '--no-color --no-documentation'
|
128
|
-
end
|
129
|
-
"""
|
130
|
-
When I set the environment variable "REEK_SRC" to "smelly.rb"
|
131
|
-
And I run `rake reek`
|
132
|
-
Then the exit status indicates an error
|
133
|
-
And it reports:
|
134
|
-
"""
|
135
|
-
smelly.rb -- 2 warnings:
|
136
|
-
[4]:UncommunicativeMethodName: Smelly#x has the name 'x'
|
137
|
-
[5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
|
138
|
-
"""
|
@@ -1,59 +0,0 @@
|
|
1
|
-
Feature: Report smells using Code Climate format
|
2
|
-
In order to run as an Engine on Code Climate, output format following their
|
3
|
-
spec.
|
4
|
-
|
5
|
-
Scenario: output is empty when there are no smells
|
6
|
-
Given a directory called 'clean' containing two clean files
|
7
|
-
When I run the code climate reek runner
|
8
|
-
Then it succeeds
|
9
|
-
And it reports this Code Climate output:
|
10
|
-
"""
|
11
|
-
"""
|
12
|
-
|
13
|
-
Scenario: Indicate smells and print them as JSON when using files
|
14
|
-
Given the smelly file 'smelly.rb'
|
15
|
-
When I run the code climate reek runner
|
16
|
-
Then it reports this Code Climate output:
|
17
|
-
"""
|
18
|
-
{
|
19
|
-
"type": "issue",
|
20
|
-
"check_name": "UncommunicativeMethodName",
|
21
|
-
"description": "Smelly#x has the name 'x'",
|
22
|
-
"categories": [
|
23
|
-
"Complexity"
|
24
|
-
],
|
25
|
-
"location": {
|
26
|
-
"path": "smelly.rb",
|
27
|
-
"lines": {
|
28
|
-
"begin": 4,
|
29
|
-
"end": 4
|
30
|
-
}
|
31
|
-
},
|
32
|
-
"remediation_points": 150000,
|
33
|
-
"content": {
|
34
|
-
"body": "An `Uncommunicative Method Name` is a method name that doesn't communicate its intent well enough.\n\nPoor names make it hard for the reader to build a mental picture of what's going on in the code. They can also be mis-interpreted; and they hurt the flow of reading, because the reader must slow down to interpret the names.\n"
|
35
|
-
},
|
36
|
-
"fingerprint": "2b41a3a4bb7de31ac4f5944bf68b7f5f"
|
37
|
-
}
|
38
|
-
NULL_BYTE_CHARACTER
|
39
|
-
{
|
40
|
-
"type": "issue",
|
41
|
-
"check_name": "UncommunicativeVariableName",
|
42
|
-
"description": "Smelly#x has the variable name 'y'",
|
43
|
-
"categories": [
|
44
|
-
"Complexity"
|
45
|
-
],
|
46
|
-
"location": {
|
47
|
-
"path": "smelly.rb",
|
48
|
-
"lines": {
|
49
|
-
"begin": 5,
|
50
|
-
"end": 5
|
51
|
-
}
|
52
|
-
},
|
53
|
-
"remediation_points": 150000,
|
54
|
-
"content": {
|
55
|
-
"body": "An `Uncommunicative Variable Name` is a variable name that doesn't communicate its intent well enough.\n\nPoor names make it hard for the reader to build a mental picture of what's going on in the code. They can also be mis-interpreted; and they hurt the flow of reading, because the reader must slow down to interpret the names.\n"
|
56
|
-
},
|
57
|
-
"fingerprint": "72f0dc8f8da5f9d7b8b29318636e5609"
|
58
|
-
}
|
59
|
-
"""
|
@@ -1,59 +0,0 @@
|
|
1
|
-
Feature: Report smells using simple JSON layout
|
2
|
-
In order to parse Reek's output simply and consistently, simply
|
3
|
-
output a list of smells in JSON.
|
4
|
-
|
5
|
-
Scenario: output is empty when there are no smells
|
6
|
-
Given a directory called 'clean' containing two clean files
|
7
|
-
When I run reek --format json clean
|
8
|
-
Then it succeeds
|
9
|
-
And it reports this JSON:
|
10
|
-
"""
|
11
|
-
[]
|
12
|
-
"""
|
13
|
-
|
14
|
-
Scenario: Indicate smells and print them as JSON when using files
|
15
|
-
Given the smelly file 'smelly.rb'
|
16
|
-
When I run reek --format json smelly.rb
|
17
|
-
Then the exit status indicates smells
|
18
|
-
And it reports this JSON:
|
19
|
-
"""
|
20
|
-
[
|
21
|
-
{
|
22
|
-
"smell_type": "UncommunicativeMethodName",
|
23
|
-
"source": "smelly.rb",
|
24
|
-
"context": "Smelly#x",
|
25
|
-
"lines": [ 4 ],
|
26
|
-
"message": "has the name 'x'",
|
27
|
-
"documentation_link": "https://github.com/troessner/reek/blob/v6.0.3/docs/Uncommunicative-Method-Name.md",
|
28
|
-
"name": "x"
|
29
|
-
},
|
30
|
-
{
|
31
|
-
"smell_type": "UncommunicativeVariableName",
|
32
|
-
"source": "smelly.rb",
|
33
|
-
"context": "Smelly#x",
|
34
|
-
"lines": [ 5 ],
|
35
|
-
"message": "has the variable name 'y'",
|
36
|
-
"documentation_link": "https://github.com/troessner/reek/blob/v6.0.3/docs/Uncommunicative-Variable-Name.md",
|
37
|
-
"name": "y"
|
38
|
-
}
|
39
|
-
]
|
40
|
-
"""
|
41
|
-
|
42
|
-
Scenario: Indicate smells and print them as JSON when using STDIN
|
43
|
-
When I pass "class Turn; end" to reek --format json
|
44
|
-
Then the exit status indicates smells
|
45
|
-
And it reports this JSON:
|
46
|
-
"""
|
47
|
-
[
|
48
|
-
{
|
49
|
-
"smell_type": "IrresponsibleModule",
|
50
|
-
"source": "STDIN",
|
51
|
-
"context": "Turn",
|
52
|
-
"lines": [
|
53
|
-
1
|
54
|
-
],
|
55
|
-
"message": "has no descriptive comment",
|
56
|
-
"documentation_link": "https://github.com/troessner/reek/blob/v6.0.3/docs/Irresponsible-Module.md"
|
57
|
-
}
|
58
|
-
]
|
59
|
-
"""
|