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,35 +0,0 @@
|
|
1
|
-
def init
|
2
|
-
super
|
3
|
-
return unless show_api_marker_section?
|
4
|
-
|
5
|
-
if sections.first
|
6
|
-
sections.first.place(:api_marker).before(:private)
|
7
|
-
else
|
8
|
-
sections :index, [:api_marker]
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
def api_marker
|
13
|
-
return if object.type == :root
|
14
|
-
|
15
|
-
erb(:private) unless ['public', 'private'].include? api_text
|
16
|
-
end
|
17
|
-
|
18
|
-
private
|
19
|
-
|
20
|
-
def api_text
|
21
|
-
api_text = object.has_tag?(:api) && object.tag(:api).text
|
22
|
-
api_text = 'public' if object.has_tag?(:public)
|
23
|
-
api_text
|
24
|
-
end
|
25
|
-
|
26
|
-
def show_api_marker_section?
|
27
|
-
return false if object.type == :root
|
28
|
-
|
29
|
-
case api_text
|
30
|
-
when 'public', 'private'
|
31
|
-
false
|
32
|
-
else
|
33
|
-
true
|
34
|
-
end
|
35
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
.note.public { background: #c5ffc5; border-color: #aaecaa; }
|
data/docs/yard_plugin.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
require 'yard'
|
2
|
-
|
3
|
-
# Template helper to modify processing of links in HTML generated from our
|
4
|
-
# markdown files.
|
5
|
-
module LocalLinkHelper
|
6
|
-
# Rewrites links to (assumed local) markdown files so they're processed as
|
7
|
-
# {file: } directives.
|
8
|
-
def resolve_links(text)
|
9
|
-
text = text.gsub(%r{<a href="([^"]*.md)">([^<]*)</a>}, '{file:\1 \2}')
|
10
|
-
super text
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
YARD::Templates::Template.extra_includes << LocalLinkHelper
|
15
|
-
YARD::Tags::Library.define_tag('Guaranteed public API', :public)
|
16
|
-
YARD::Tags::Library.define_tag('Code quality configuration', :quality)
|
17
|
-
YARD::Templates::Engine.register_template_path File.join(File.dirname(__FILE__), 'templates')
|
@@ -1,15 +0,0 @@
|
|
1
|
-
Feature: The Reek CLI maintains backwards compatibility
|
2
|
-
In order to use Reek without fuss
|
3
|
-
As a developer
|
4
|
-
I want to have a stable basic command line interface
|
5
|
-
|
6
|
-
Scenario: the example from README reports as expected
|
7
|
-
Given the smelly file 'smelly.rb'
|
8
|
-
When I run reek smelly.rb
|
9
|
-
Then the exit status indicates smells
|
10
|
-
And it reports:
|
11
|
-
"""
|
12
|
-
smelly.rb -- 2 warnings:
|
13
|
-
[4]:UncommunicativeMethodName: Smelly#x has the name 'x'
|
14
|
-
[5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
|
15
|
-
"""
|
@@ -1,123 +0,0 @@
|
|
1
|
-
Feature: Reek can be controlled using command-line options
|
2
|
-
In order to change Reek's default behaviour
|
3
|
-
As a developer
|
4
|
-
I want to supply options on the command line
|
5
|
-
|
6
|
-
Scenario: return non-zero status on bad option
|
7
|
-
When I run reek --no-such-option
|
8
|
-
Then the exit status indicates an error
|
9
|
-
And it reports the error "Error: invalid option: --no-such-option"
|
10
|
-
And there is no output on stdout
|
11
|
-
|
12
|
-
Scenario: display the current version number
|
13
|
-
When I run reek --version
|
14
|
-
Then it succeeds
|
15
|
-
And it reports the current version
|
16
|
-
|
17
|
-
Scenario: return given status code when using --failure-exit-code
|
18
|
-
Given the smelly file 'smelly.rb'
|
19
|
-
When I run reek smelly.rb --failure-exit-code 23
|
20
|
-
Then the exit status is 23
|
21
|
-
|
22
|
-
Scenario: return given status code when using --success-exit-code
|
23
|
-
Given the clean file "clean.rb"
|
24
|
-
When I run reek clean.rb --success-exit-code 42
|
25
|
-
Then the exit status is 42
|
26
|
-
|
27
|
-
Scenario: display the help information
|
28
|
-
When I run reek --help
|
29
|
-
Then it succeeds
|
30
|
-
And it reports:
|
31
|
-
"""
|
32
|
-
Usage: reek [options] [files]
|
33
|
-
|
34
|
-
Examples:
|
35
|
-
|
36
|
-
reek lib/*.rb
|
37
|
-
reek -s lib
|
38
|
-
cat my_class.rb | reek
|
39
|
-
|
40
|
-
See https://github.com/troessner/reek for detailed help.
|
41
|
-
|
42
|
-
Configuration:
|
43
|
-
-c, --config FILE Read configuration options from FILE
|
44
|
-
--smell SMELL Only look for a specific smell.
|
45
|
-
Call it like this: reek --smell MissingSafeMethod source.rb
|
46
|
-
Check out https://github.com/troessner/reek/blob/v6.0.3/docs/Code-Smells.md for a list of smells
|
47
|
-
--stdin-filename FILE When passing code in via pipe, assume this filename when checking file or directory rules in the config.
|
48
|
-
|
49
|
-
Generate a todo list:
|
50
|
-
-t, --todo Generate a todo list
|
51
|
-
|
52
|
-
Report format:
|
53
|
-
-f, --format FORMAT Report smells in the given format:
|
54
|
-
html
|
55
|
-
text (default)
|
56
|
-
yaml
|
57
|
-
json
|
58
|
-
xml
|
59
|
-
|
60
|
-
Text format options:
|
61
|
-
--[no-]color Use colors for the output (default: true)
|
62
|
-
-V, --[no-]empty-headings Show headings for smell-free source files (default: false)
|
63
|
-
-U, --[no-]documentation Show link to related documentation page for each smell (default: true)
|
64
|
-
--[no-]show-configuration-path
|
65
|
-
Show which configuration file Reek is using (default: false)
|
66
|
-
-n, --[no-]line-numbers Show line numbers in the output (default: true)
|
67
|
-
-s, --single-line Show location in editor-compatible single-line-per-smell format
|
68
|
-
-P, --[no-]progress Show progress of each source as it is examined (default: true)
|
69
|
-
--sort-by SORTING Sort reported files by the given criterium:
|
70
|
-
smelliness ("smelliest" files first)
|
71
|
-
none (default - output in processing order)
|
72
|
-
--force-exclusion Force excluding files specified in the configuration `exclude_paths`
|
73
|
-
even if they are explicitly passed as arguments
|
74
|
-
|
75
|
-
Exit codes:
|
76
|
-
--success-exit-code CODE The exit code when no smells are found (default: 0)
|
77
|
-
--failure-exit-code CODE The exit code when smells are found (default: 2)
|
78
|
-
|
79
|
-
Utility options:
|
80
|
-
-h, --help Show this message
|
81
|
-
-l, --list List all available smell detectors
|
82
|
-
-v, --version Show version
|
83
|
-
"""
|
84
|
-
|
85
|
-
Scenario: List all available smell detectors
|
86
|
-
When I run reek --list
|
87
|
-
Then it succeeds
|
88
|
-
And it reports:
|
89
|
-
"""
|
90
|
-
All available smell detectors:
|
91
|
-
|
92
|
-
Attribute
|
93
|
-
BooleanParameter
|
94
|
-
ClassVariable
|
95
|
-
ControlParameter
|
96
|
-
DataClump
|
97
|
-
DuplicateMethodCall
|
98
|
-
FeatureEnvy
|
99
|
-
InstanceVariableAssumption
|
100
|
-
IrresponsibleModule
|
101
|
-
LongParameterList
|
102
|
-
LongYieldList
|
103
|
-
ManualDispatch
|
104
|
-
MissingSafeMethod
|
105
|
-
ModuleInitialize
|
106
|
-
NestedIterators
|
107
|
-
NilCheck
|
108
|
-
RepeatedConditional
|
109
|
-
SubclassedFromCoreClass
|
110
|
-
TooManyConstants
|
111
|
-
TooManyInstanceVariables
|
112
|
-
TooManyMethods
|
113
|
-
TooManyStatements
|
114
|
-
UncommunicativeMethodName
|
115
|
-
UncommunicativeModuleName
|
116
|
-
UncommunicativeParameterName
|
117
|
-
UncommunicativeVariableName
|
118
|
-
UnusedParameters
|
119
|
-
UnusedPrivateMethod
|
120
|
-
UtilityFunction
|
121
|
-
|
122
|
-
Check out https://github.com/troessner/reek/blob/v6.0.3/docs/Code-Smells.md for a details on each detector
|
123
|
-
"""
|
@@ -1,33 +0,0 @@
|
|
1
|
-
Feature: Show progress
|
2
|
-
In order to see the progress of the examiners
|
3
|
-
As a developer
|
4
|
-
I want to be able to selectively activate progress reporting
|
5
|
-
|
6
|
-
# Note that --progress is the default on TTYs, but needs to be explicitely
|
7
|
-
# enabled here because output in the cucumber scenarios does not go to a TTY.
|
8
|
-
Scenario: shows progress output on mixed files by default
|
9
|
-
Given a directory called 'mixed_files' containing some clean and smelly files
|
10
|
-
When I run reek --progress mixed_files
|
11
|
-
Then the exit status indicates smells
|
12
|
-
And it reports:
|
13
|
-
"""
|
14
|
-
Inspecting 2 file(s):
|
15
|
-
.S
|
16
|
-
|
17
|
-
mixed_files/dirty.rb -- 2 warnings:
|
18
|
-
[4]:UncommunicativeMethodName: Smelly#x has the name 'x'
|
19
|
-
[5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
|
20
|
-
2 total warnings
|
21
|
-
"""
|
22
|
-
|
23
|
-
Scenario: --no-progress disables progress output
|
24
|
-
Given a directory called 'mixed_files' containing some clean and smelly files
|
25
|
-
When I run reek --no-progress mixed_files
|
26
|
-
Then the exit status indicates smells
|
27
|
-
And it reports:
|
28
|
-
"""
|
29
|
-
mixed_files/dirty.rb -- 2 warnings:
|
30
|
-
[4]:UncommunicativeMethodName: Smelly#x has the name 'x'
|
31
|
-
[5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
|
32
|
-
2 total warnings
|
33
|
-
"""
|
@@ -1,15 +0,0 @@
|
|
1
|
-
Feature: Smell selection
|
2
|
-
In order to focus on particular code smells
|
3
|
-
As a developer
|
4
|
-
I want to be able to selectively activate smell detectors
|
5
|
-
|
6
|
-
Scenario: --smell selects a smell to detect
|
7
|
-
Given the smelly file 'smelly.rb'
|
8
|
-
And a configuration file 'partial_mask.reek'
|
9
|
-
When I run reek --no-line-numbers --smell UncommunicativeVariableName smelly.rb
|
10
|
-
Then the exit status indicates smells
|
11
|
-
And it reports:
|
12
|
-
"""
|
13
|
-
smelly.rb -- 1 warning:
|
14
|
-
UncommunicativeVariableName: Smelly#x has the variable name 'y'
|
15
|
-
"""
|
@@ -1,38 +0,0 @@
|
|
1
|
-
Feature: Reports total number of code smells
|
2
|
-
In order to monitor the total number of smells
|
3
|
-
Reek outputs the total number of smells among all files inspected.
|
4
|
-
|
5
|
-
Scenario: Does not output total number of smells when inspecting single file
|
6
|
-
Given the smelly file 'smelly.rb'
|
7
|
-
When I run reek smelly.rb
|
8
|
-
Then the exit status indicates smells
|
9
|
-
And it reports:
|
10
|
-
"""
|
11
|
-
smelly.rb -- 2 warnings:
|
12
|
-
[4]:UncommunicativeMethodName: Smelly#x has the name 'x'
|
13
|
-
[5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
|
14
|
-
"""
|
15
|
-
|
16
|
-
Scenario: Output total number of smells when inspecting multiple files
|
17
|
-
Given a directory called 'smelly' containing two smelly files
|
18
|
-
When I run reek smelly
|
19
|
-
Then the exit status indicates smells
|
20
|
-
And it reports:
|
21
|
-
"""
|
22
|
-
smelly/dirty_one.rb -- 2 warnings:
|
23
|
-
[4]:UncommunicativeMethodName: Smelly#x has the name 'x'
|
24
|
-
[5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
|
25
|
-
smelly/dirty_two.rb -- 2 warnings:
|
26
|
-
[4]:UncommunicativeMethodName: Smelly#x has the name 'x'
|
27
|
-
[5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
|
28
|
-
4 total warnings
|
29
|
-
"""
|
30
|
-
|
31
|
-
Scenario: Output total number of smells even if total equals 0
|
32
|
-
Given a directory called 'clean' containing two clean files
|
33
|
-
When I run reek clean
|
34
|
-
Then it succeeds
|
35
|
-
And it reports:
|
36
|
-
"""
|
37
|
-
0 total warnings
|
38
|
-
"""
|
@@ -1,65 +0,0 @@
|
|
1
|
-
Feature: Reek reads from $stdin when no files are given
|
2
|
-
In order to use reek with pipelines
|
3
|
-
As a developer
|
4
|
-
I want to pipe source code on stdin
|
5
|
-
|
6
|
-
Scenario: return zero status with no smells
|
7
|
-
When I pass "def simple() @fred = 3 end" to reek
|
8
|
-
Then it succeeds
|
9
|
-
And it reports nothing
|
10
|
-
|
11
|
-
Scenario: outputs nothing on empty stdin
|
12
|
-
When I pass "" to reek
|
13
|
-
Then it succeeds
|
14
|
-
And it reports nothing
|
15
|
-
|
16
|
-
Scenario: outputs header only on empty stdin in verbose mode
|
17
|
-
When I pass "" to reek -V
|
18
|
-
Then it succeeds
|
19
|
-
And it reports:
|
20
|
-
"""
|
21
|
-
STDIN -- 0 warnings
|
22
|
-
"""
|
23
|
-
|
24
|
-
Scenario: return non-zero status when there are smells
|
25
|
-
When I pass "class Turn; def y() @x = 3; end end" to reek
|
26
|
-
Then the exit status indicates smells
|
27
|
-
And it reports:
|
28
|
-
"""
|
29
|
-
STDIN -- 3 warnings:
|
30
|
-
[1]:IrresponsibleModule: Turn has no descriptive comment
|
31
|
-
[1]:UncommunicativeMethodName: Turn#y has the name 'y'
|
32
|
-
[1]:UncommunicativeVariableName: Turn has the variable name '@x'
|
33
|
-
"""
|
34
|
-
|
35
|
-
Scenario: syntax error causes the source to be ignored
|
36
|
-
When I pass "= invalid syntax =" to reek
|
37
|
-
Then it succeeds
|
38
|
-
And it reports the error "Parser::SyntaxError: unexpected token tEQL"
|
39
|
-
|
40
|
-
Scenario: providing a filename to use for the config to match against
|
41
|
-
Given a file named "web_app/config.reek" with:
|
42
|
-
"""
|
43
|
-
---
|
44
|
-
directories:
|
45
|
-
"web_app/app/controllers":
|
46
|
-
IrresponsibleModule:
|
47
|
-
enabled: false
|
48
|
-
NestedIterators:
|
49
|
-
enabled: false
|
50
|
-
InstanceVariableAssumption:
|
51
|
-
enabled: false
|
52
|
-
"""
|
53
|
-
When I pass a stdin to reek --config web_app/config.reek --stdin-filename web_app/app/controllers/users_controller with:
|
54
|
-
"""
|
55
|
-
class UsersController < ApplicationController
|
56
|
-
def show
|
57
|
-
respond_with do |format|
|
58
|
-
format.json { |json| @user.to_custom_json }
|
59
|
-
format.xml { |xml| @user.to_fancy_xml }
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
"""
|
64
|
-
Then it succeeds
|
65
|
-
And it reports nothing
|
@@ -1,87 +0,0 @@
|
|
1
|
-
Feature: `accept` configuration setting
|
2
|
-
In order to have a more fine-grained control over what Reek reports
|
3
|
-
As a user
|
4
|
-
I want to be able to accept specific patterns and names to exclude them from reporting
|
5
|
-
|
6
|
-
Scenario: Accept names
|
7
|
-
Given a file named "config.reek" with:
|
8
|
-
"""
|
9
|
-
---
|
10
|
-
detectors:
|
11
|
-
UncommunicativeMethodName:
|
12
|
-
accept:
|
13
|
-
- m1
|
14
|
-
- m2
|
15
|
-
UncommunicativeParameterName:
|
16
|
-
accept:
|
17
|
-
- a1
|
18
|
-
- a2
|
19
|
-
UncommunicativeModuleName:
|
20
|
-
accept:
|
21
|
-
- C1
|
22
|
-
UncommunicativeVariableName:
|
23
|
-
accept:
|
24
|
-
- var1
|
25
|
-
"""
|
26
|
-
And a file named "smelly.rb" with:
|
27
|
-
"""
|
28
|
-
# Should not report UncommunicativeModuleName
|
29
|
-
class C1
|
30
|
-
# Should not report UncommunicativeMethodName and UncommunicativeParameterName
|
31
|
-
def m1(a1); a1; end
|
32
|
-
# Should not report UncommunicativeMethodName and UncommunicativeParameterName
|
33
|
-
def m2(a2); a2; end
|
34
|
-
# Should report UncommunicativeMethodName and UncommunicativeParameterName
|
35
|
-
def m3(a3); a3; end
|
36
|
-
var1 = 2 # Should not report UncommunicativeVariableName
|
37
|
-
myvar1 = 2 # Should not report UncommunicativeVariableName
|
38
|
-
var2 = 2 # Should report UncommunicativeVariableName
|
39
|
-
end
|
40
|
-
"""
|
41
|
-
When I run reek -c config.reek smelly.rb
|
42
|
-
Then it reports:
|
43
|
-
"""
|
44
|
-
smelly.rb -- 3 warnings:
|
45
|
-
[8]:UncommunicativeMethodName: C1#m3 has the name 'm3'
|
46
|
-
[8]:UncommunicativeParameterName: C1#m3 has the parameter name 'a3'
|
47
|
-
[11]:UncommunicativeVariableName: C1 has the variable name 'var2'
|
48
|
-
"""
|
49
|
-
|
50
|
-
Scenario: Accept regexes
|
51
|
-
Given a file named "config.reek" with:
|
52
|
-
"""
|
53
|
-
---
|
54
|
-
detectors:
|
55
|
-
UncommunicativeMethodName:
|
56
|
-
accept:
|
57
|
-
- /oobar/
|
58
|
-
UncommunicativeParameterName:
|
59
|
-
accept:
|
60
|
-
- /ola/
|
61
|
-
UncommunicativeModuleName:
|
62
|
-
accept:
|
63
|
-
- /lassy/
|
64
|
-
UncommunicativeVariableName:
|
65
|
-
accept:
|
66
|
-
- /^var1/
|
67
|
-
"""
|
68
|
-
And a file named "smelly.rb" with:
|
69
|
-
"""
|
70
|
-
# Should not report UncommunicativeModuleName
|
71
|
-
class Classy1
|
72
|
-
# Should not report UncommunicativeMethodName and UncommunicativeParameterName
|
73
|
-
def foobar1(hola1); hola1; end
|
74
|
-
# Should report UncommunicativeMethodName and UncommunicativeParameterName
|
75
|
-
def m2(a2); a2; end
|
76
|
-
var1 = 2 # Should not report UncommunicativeVariableName
|
77
|
-
myvar1 = 2 # Should report UncommunicativeVariableName
|
78
|
-
end
|
79
|
-
"""
|
80
|
-
When I run reek -c config.reek smelly.rb
|
81
|
-
Then it reports:
|
82
|
-
"""
|
83
|
-
smelly.rb -- 3 warnings:
|
84
|
-
[6]:UncommunicativeMethodName: Classy1#m2 has the name 'm2'
|
85
|
-
[6]:UncommunicativeParameterName: Classy1#m2 has the parameter name 'a2'
|
86
|
-
[8]:UncommunicativeVariableName: Classy1 has the variable name 'myvar1'
|
87
|
-
"""
|