danger-wcc 0.0.2
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 +7 -0
- data/.circleci/config.yml +46 -0
- data/.gitignore +6 -0
- data/.rubocop.yml +219 -0
- data/.ruby-version +1 -0
- data/.travis.yml +12 -0
- data/Dangerfile +5 -0
- data/Gemfile +6 -0
- data/Guardfile +35 -0
- data/LICENSE +201 -0
- data/README.md +2 -0
- data/Rakefile +25 -0
- data/danger-wcc.gemspec +58 -0
- data/lib/danger_plugin.rb +3 -0
- data/lib/version.rb +5 -0
- data/lib/wcc/commit_lint.rb +158 -0
- data/lib/wcc/commit_lint/README.md +3 -0
- data/lib/wcc/commit_lint/commit_check.rb +19 -0
- data/lib/wcc/commit_lint/empty_line_check.rb +22 -0
- data/lib/wcc/commit_lint/subject_cap_check.rb +22 -0
- data/lib/wcc/commit_lint/subject_length_check.rb +28 -0
- data/lib/wcc/commit_lint/subject_period_check.rb +22 -0
- data/lib/wcc/commit_lint/subject_words_check.rb +22 -0
- data/lib/wcc/default.jshintrc +5 -0
- data/lib/wcc/defaults.reek +131 -0
- data/lib/wcc/github.rb +24 -0
- data/lib/wcc/jshint.rb +63 -0
- data/lib/wcc/plugin.rb +128 -0
- data/lib/wcc/reek.rb +56 -0
- data/lib/wcc/rubocop_exceptions.rb +99 -0
- data/lib/wcc/todos.rb +78 -0
- data/lib/wcc/utils.rb +136 -0
- data/spec/fixtures/brakeman/a.tmp +13 -0
- data/spec/fixtures/brakeman/b.tmp +14 -0
- data/spec/fixtures/brakeman/brakeman.diff +20 -0
- data/spec/fixtures/brakeman/brakeman.out +14 -0
- data/spec/fixtures/exception_context.diff +15 -0
- data/spec/fixtures/exception_insert_context.diff +14 -0
- data/spec/fixtures/exception_misspelled.diff +14 -0
- data/spec/fixtures/exception_multiline_context.diff +20 -0
- data/spec/fixtures/exception_reenabled.diff +13 -0
- data/spec/fixtures/find_in_diff.rb +21 -0
- data/spec/fixtures/find_in_diff_2_chunks.diff +24 -0
- data/spec/fixtures/flay.diff +17 -0
- data/spec/fixtures/flay.txt +18 -0
- data/spec/fixtures/github/labels.json +72 -0
- data/spec/fixtures/github_pr.json +325 -0
- data/spec/fixtures/jshint/a.tmp +5 -0
- data/spec/fixtures/jshint/b.tmp +7 -0
- data/spec/fixtures/jshint/jshint.diff +13 -0
- data/spec/fixtures/jshint/out.jshint +7 -0
- data/spec/fixtures/no_exception.diff +10 -0
- data/spec/fixtures/no_todo.diff +13 -0
- data/spec/fixtures/reek/line_numbers.reek +121 -0
- data/spec/fixtures/reek/reek.diff +50 -0
- data/spec/fixtures/rubocop_exception.rb +39 -0
- data/spec/fixtures/todo.rb +21 -0
- data/spec/fixtures/todo_link_next_line.diff +14 -0
- data/spec/fixtures/todo_link_same_line.diff +13 -0
- data/spec/fixtures/todo_no_link.diff +13 -0
- data/spec/fixtures/todo_removed.diff +13 -0
- data/spec/fixtures_helper.rb +19 -0
- data/spec/spec_helper.rb +73 -0
- data/spec/wcc/commit_lint_spec.rb +392 -0
- data/spec/wcc/github_spec.rb +67 -0
- data/spec/wcc/jshint_spec.rb +68 -0
- data/spec/wcc/plugin_spec.rb +134 -0
- data/spec/wcc/reek_spec.rb +71 -0
- data/spec/wcc/rubocop_exceptions_spec.rb +136 -0
- data/spec/wcc/todos_spec.rb +96 -0
- data/spec/wcc/utils_spec.rb +134 -0
- data/spec/wcc_spec.rb +21 -0
- metadata +393 -0
data/README.md
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'bundler/gem_tasks'
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
require 'rubocop/rake_task'
|
6
|
+
|
7
|
+
RSpec::Core::RakeTask.new(:specs)
|
8
|
+
|
9
|
+
task default: :specs
|
10
|
+
|
11
|
+
task :spec do
|
12
|
+
Rake::Task['specs'].invoke
|
13
|
+
Rake::Task['rubocop'].invoke
|
14
|
+
Rake::Task['spec_docs'].invoke
|
15
|
+
end
|
16
|
+
|
17
|
+
desc 'Run RuboCop on the lib/specs directory'
|
18
|
+
RuboCop::RakeTask.new(:rubocop) do |task|
|
19
|
+
task.patterns = ['lib/**/*.rb', 'spec/**/*.rb']
|
20
|
+
end
|
21
|
+
|
22
|
+
desc 'Ensure that the plugin passes `danger plugins lint`'
|
23
|
+
task :spec_docs do
|
24
|
+
sh 'bundle exec danger plugins lint'
|
25
|
+
end
|
data/danger-wcc.gemspec
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
lib = File.expand_path('../lib', __FILE__)
|
5
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
6
|
+
require 'version'
|
7
|
+
|
8
|
+
Gem::Specification.new do |spec|
|
9
|
+
spec.name = 'danger-wcc'
|
10
|
+
spec.version = DangerWCC::VERSION
|
11
|
+
spec.authors = ['Watermark Dev']
|
12
|
+
spec.email = ['dev@watermark.org']
|
13
|
+
spec.description = 'A Danger plugin for Watermark Church custom rules.'
|
14
|
+
spec.summary = 'A Danger plugin for Watermark Church custom rules.'
|
15
|
+
spec.homepage = 'https://github.com/watermarkchurch/danger-wcc'
|
16
|
+
spec.license = 'Apache-2.0'
|
17
|
+
|
18
|
+
spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
19
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
20
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
21
|
+
spec.require_paths = ['lib']
|
22
|
+
|
23
|
+
spec.add_runtime_dependency 'brakeman'
|
24
|
+
spec.add_runtime_dependency 'danger-plugin-api', '~> 1.0'
|
25
|
+
spec.add_runtime_dependency 'flay'
|
26
|
+
spec.add_runtime_dependency 'git_diff', '~> 0.3'
|
27
|
+
spec.add_runtime_dependency 'reek'
|
28
|
+
|
29
|
+
# General ruby development
|
30
|
+
spec.add_development_dependency 'bundler', '~> 1.3'
|
31
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
32
|
+
|
33
|
+
# Testing support
|
34
|
+
spec.add_development_dependency 'rspec', '~> 3.4'
|
35
|
+
spec.add_development_dependency 'rspec_junit_formatter', '~> 0.3.0'
|
36
|
+
spec.add_development_dependency 'webmock', '~> 3.1'
|
37
|
+
|
38
|
+
# Linting code and docs
|
39
|
+
spec.add_development_dependency 'rubocop'
|
40
|
+
spec.add_development_dependency 'yard'
|
41
|
+
|
42
|
+
# Makes testing easy via `bundle exec guard`
|
43
|
+
spec.add_development_dependency 'guard', '~> 2.14'
|
44
|
+
spec.add_development_dependency 'guard-rspec', '~> 4.7'
|
45
|
+
spec.add_development_dependency 'guard-rubocop', '~> 1.3.0'
|
46
|
+
|
47
|
+
# If you want to work on older builds of ruby
|
48
|
+
spec.add_development_dependency 'listen', '3.0.7'
|
49
|
+
|
50
|
+
# This gives you the chance to run a REPL inside your tests
|
51
|
+
# via:
|
52
|
+
#
|
53
|
+
# require 'pry'
|
54
|
+
# binding.pry
|
55
|
+
#
|
56
|
+
# This will stop test execution and let you inspect the results
|
57
|
+
spec.add_development_dependency 'pry'
|
58
|
+
end
|
data/lib/version.rb
ADDED
@@ -0,0 +1,158 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'commit_lint/commit_check'
|
4
|
+
require_relative 'commit_lint/subject_cap_check'
|
5
|
+
require_relative 'commit_lint/subject_words_check'
|
6
|
+
require_relative 'commit_lint/subject_length_check'
|
7
|
+
require_relative 'commit_lint/subject_period_check'
|
8
|
+
require_relative 'commit_lint/empty_line_check'
|
9
|
+
|
10
|
+
class Danger::DangerWCC < Danger::Plugin
|
11
|
+
# Run each commit in the PR through a message linting.
|
12
|
+
#
|
13
|
+
# Commit lint will check each commit in the PR to ensure the following is
|
14
|
+
# true:
|
15
|
+
#
|
16
|
+
# * Commit subject begins with a capital letter (`subject_cap`)
|
17
|
+
# * Commit subject is more than one word (`subject_word`)
|
18
|
+
# * Commit subject is no longer than 50 characters (`subject_length`)
|
19
|
+
# * Commit subject does not end in a period (`subject_period`)
|
20
|
+
# * Commit subject and body are separated by an empty line (`empty_line`)
|
21
|
+
#
|
22
|
+
# By default, Commit Lint fails, but you can configure this behavior.
|
23
|
+
#
|
24
|
+
#
|
25
|
+
# @example Lint all commits using defaults
|
26
|
+
#
|
27
|
+
# commit_lint.check
|
28
|
+
#
|
29
|
+
# @example Warn instead of fail
|
30
|
+
#
|
31
|
+
# commit_lint.check warn: :all
|
32
|
+
#
|
33
|
+
# @example Disable a particular check
|
34
|
+
#
|
35
|
+
# commit_lint.check disable: [:subject_period]
|
36
|
+
#
|
37
|
+
# @see danger/danger
|
38
|
+
# @tags commit linting
|
39
|
+
#
|
40
|
+
class CommitLint
|
41
|
+
NOOP_MESSAGE = 'All checks were disabled, nothing to do.'
|
42
|
+
|
43
|
+
def initialize(plugin, config = {})
|
44
|
+
@plugin = plugin
|
45
|
+
@config = config
|
46
|
+
end
|
47
|
+
|
48
|
+
def git
|
49
|
+
@plugin.git
|
50
|
+
end
|
51
|
+
|
52
|
+
def messaging
|
53
|
+
@plugin
|
54
|
+
end
|
55
|
+
|
56
|
+
# Checks the commits with whatever config the user passes.
|
57
|
+
#
|
58
|
+
# Passing in a hash which contain the following keys:
|
59
|
+
#
|
60
|
+
# * `disable` - array of checks to skip
|
61
|
+
# * `fail` - array of checks to fail on
|
62
|
+
# * `warn` - array of checks to warn on
|
63
|
+
#
|
64
|
+
# The current check types are:
|
65
|
+
#
|
66
|
+
# * `subject_cap`
|
67
|
+
# * `subject_word`
|
68
|
+
# * `subject_length`
|
69
|
+
# * `subject_period`
|
70
|
+
# * `empty_line`
|
71
|
+
#
|
72
|
+
# Note: you can pass :all instead of an array to target all checks.
|
73
|
+
#
|
74
|
+
# @param [Hash] config
|
75
|
+
#
|
76
|
+
# @return [void]
|
77
|
+
#
|
78
|
+
def perform
|
79
|
+
if all_checks_disabled?
|
80
|
+
messaging.warn NOOP_MESSAGE
|
81
|
+
else
|
82
|
+
check_messages
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
private
|
87
|
+
|
88
|
+
def check_messages
|
89
|
+
messages.each do |message|
|
90
|
+
warning_checkers.each do |klass|
|
91
|
+
check_and_issue(klass, message, 'warn')
|
92
|
+
end
|
93
|
+
|
94
|
+
failing_checkers.each do |klass|
|
95
|
+
check_and_issue(klass, message, 'fail')
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def check_and_issue(klass, message, severity)
|
101
|
+
c = klass.new(message, @config.fetch(klass.type, {}))
|
102
|
+
return unless c.fail?
|
103
|
+
|
104
|
+
messaging.issue([c.message, message[:sha]].join("\n"),
|
105
|
+
severity: severity)
|
106
|
+
end
|
107
|
+
|
108
|
+
def checkers
|
109
|
+
[
|
110
|
+
SubjectCapCheck,
|
111
|
+
SubjectWordsCheck,
|
112
|
+
SubjectLengthCheck,
|
113
|
+
SubjectPeriodCheck,
|
114
|
+
EmptyLineCheck
|
115
|
+
]
|
116
|
+
end
|
117
|
+
|
118
|
+
def checks
|
119
|
+
checkers.map(&:type)
|
120
|
+
end
|
121
|
+
|
122
|
+
def enabled_checkers
|
123
|
+
checkers.reject { |klass| disabled_checks.include? klass.type }
|
124
|
+
end
|
125
|
+
|
126
|
+
def warning_checkers
|
127
|
+
enabled_checkers.select { |klass| warning_checks.include? klass.type }
|
128
|
+
end
|
129
|
+
|
130
|
+
def failing_checkers
|
131
|
+
enabled_checkers - warning_checkers
|
132
|
+
end
|
133
|
+
|
134
|
+
def all_checks_disabled?
|
135
|
+
@config[:disable] == :all || disabled_checks.count == checkers.count
|
136
|
+
end
|
137
|
+
|
138
|
+
def disabled_checks
|
139
|
+
@config[:disable] || []
|
140
|
+
end
|
141
|
+
|
142
|
+
def warning_checks
|
143
|
+
return checks if @config[:warn] == :all
|
144
|
+
@config[:warn] || []
|
145
|
+
end
|
146
|
+
|
147
|
+
def messages
|
148
|
+
git.commits.map do |commit|
|
149
|
+
(subject, empty_line) = commit.message.split("\n")
|
150
|
+
{
|
151
|
+
subject: subject,
|
152
|
+
empty_line: empty_line,
|
153
|
+
sha: commit.sha
|
154
|
+
}
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
class CommitCheck
|
5
|
+
def self.fail?(message, options)
|
6
|
+
new(message, options || {}).fail?
|
7
|
+
end
|
8
|
+
|
9
|
+
def initialize(message, options = {})
|
10
|
+
end
|
11
|
+
|
12
|
+
def message
|
13
|
+
raise NotImplementedError, 'implement in subclass'
|
14
|
+
end
|
15
|
+
|
16
|
+
def fail?
|
17
|
+
raise NotImplementedError, 'implement in subclass'
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
class EmptyLineCheck < CommitCheck
|
5
|
+
MESSAGE = 'Please separate subject from body with newline.'
|
6
|
+
|
7
|
+
def self.type
|
8
|
+
:empty_line
|
9
|
+
end
|
10
|
+
|
11
|
+
def initialize(message, _options = {})
|
12
|
+
@empty_line = message[:empty_line]
|
13
|
+
end
|
14
|
+
|
15
|
+
def message
|
16
|
+
MESSAGE
|
17
|
+
end
|
18
|
+
|
19
|
+
def fail?
|
20
|
+
@empty_line && !@empty_line.empty?
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
class SubjectCapCheck < CommitCheck
|
5
|
+
MESSAGE = 'Please start subject with capital letter.'
|
6
|
+
|
7
|
+
def self.type
|
8
|
+
:subject_cap
|
9
|
+
end
|
10
|
+
|
11
|
+
def initialize(message, _options = {})
|
12
|
+
@first_character = message[:subject].split('').first
|
13
|
+
end
|
14
|
+
|
15
|
+
def message
|
16
|
+
MESSAGE
|
17
|
+
end
|
18
|
+
|
19
|
+
def fail?
|
20
|
+
@first_character != @first_character.upcase
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
class SubjectLengthCheck < CommitCheck
|
5
|
+
def self.type
|
6
|
+
:subject_length
|
7
|
+
end
|
8
|
+
|
9
|
+
def initialize(message, options = {})
|
10
|
+
@subject = message[:subject]
|
11
|
+
@max_length = options.fetch(:max, 50)
|
12
|
+
@min_length = options.fetch(:min, 1)
|
13
|
+
end
|
14
|
+
|
15
|
+
def message
|
16
|
+
if @subject.length > @max_length
|
17
|
+
"Please limit commit subject line to #{@max_length} characters."
|
18
|
+
else
|
19
|
+
"Please write a commit subject line of at least #{@min_length} "\
|
20
|
+
'characters.'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def fail?
|
25
|
+
@subject.length > @max_length ||
|
26
|
+
@subject.length < @min_length
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
class SubjectPeriodCheck < CommitCheck
|
5
|
+
MESSAGE = 'Please remove period from end of commit subject line.'
|
6
|
+
|
7
|
+
def self.type
|
8
|
+
:subject_period
|
9
|
+
end
|
10
|
+
|
11
|
+
def initialize(message, _options = {})
|
12
|
+
@subject = message[:subject]
|
13
|
+
end
|
14
|
+
|
15
|
+
def message
|
16
|
+
MESSAGE
|
17
|
+
end
|
18
|
+
|
19
|
+
def fail?
|
20
|
+
@subject.split('').last == '.'
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
class SubjectWordsCheck < CommitCheck
|
5
|
+
MESSAGE = 'Please use more than one word.'
|
6
|
+
|
7
|
+
def self.type
|
8
|
+
:subject_words
|
9
|
+
end
|
10
|
+
|
11
|
+
def initialize(message, _options = {})
|
12
|
+
@subject = message[:subject]
|
13
|
+
end
|
14
|
+
|
15
|
+
def message
|
16
|
+
MESSAGE
|
17
|
+
end
|
18
|
+
|
19
|
+
def fail?
|
20
|
+
@subject.split.count < 2
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,131 @@
|
|
1
|
+
---
|
2
|
+
Attribute:
|
3
|
+
enabled: true
|
4
|
+
exclude: []
|
5
|
+
BooleanParameter:
|
6
|
+
enabled: true
|
7
|
+
exclude: []
|
8
|
+
ClassVariable:
|
9
|
+
enabled: true
|
10
|
+
exclude: []
|
11
|
+
ControlParameter:
|
12
|
+
enabled: true
|
13
|
+
exclude: []
|
14
|
+
DataClump:
|
15
|
+
enabled: true
|
16
|
+
exclude: []
|
17
|
+
max_copies: 2
|
18
|
+
min_clump_size: 2
|
19
|
+
DuplicateMethodCall:
|
20
|
+
enabled: true
|
21
|
+
exclude: []
|
22
|
+
max_calls: 2
|
23
|
+
allow_calls: []
|
24
|
+
FeatureEnvy:
|
25
|
+
enabled: true
|
26
|
+
exclude: []
|
27
|
+
InstanceVariableAssumption:
|
28
|
+
enabled: true
|
29
|
+
exclude: []
|
30
|
+
IrresponsibleModule:
|
31
|
+
enabled: false
|
32
|
+
exclude: []
|
33
|
+
LongParameterList:
|
34
|
+
enabled: true
|
35
|
+
exclude: []
|
36
|
+
max_params: 3
|
37
|
+
overrides:
|
38
|
+
initialize:
|
39
|
+
max_params: 5
|
40
|
+
LongYieldList:
|
41
|
+
enabled: true
|
42
|
+
exclude: []
|
43
|
+
max_params: 3
|
44
|
+
ManualDispatch:
|
45
|
+
enabled: true
|
46
|
+
exclude: []
|
47
|
+
ModuleInitialize:
|
48
|
+
enabled: true
|
49
|
+
exclude: []
|
50
|
+
NestedIterators:
|
51
|
+
enabled: true
|
52
|
+
exclude: []
|
53
|
+
max_allowed_nesting: 1
|
54
|
+
ignore_iterators:
|
55
|
+
- tap
|
56
|
+
NilCheck:
|
57
|
+
enabled: true
|
58
|
+
exclude: []
|
59
|
+
PrimaDonnaMethod:
|
60
|
+
enabled: true
|
61
|
+
exclude: []
|
62
|
+
RepeatedConditional:
|
63
|
+
enabled: true
|
64
|
+
exclude: []
|
65
|
+
max_ifs: 2
|
66
|
+
SubclassedFromCoreClass:
|
67
|
+
enabled: true
|
68
|
+
exclude: []
|
69
|
+
Syntax:
|
70
|
+
enabled: true
|
71
|
+
exclude: []
|
72
|
+
TooManyConstants:
|
73
|
+
enabled: false
|
74
|
+
exclude: []
|
75
|
+
max_constants: 5
|
76
|
+
TooManyInstanceVariables:
|
77
|
+
enabled: false
|
78
|
+
exclude: []
|
79
|
+
max_instance_variables: 5
|
80
|
+
TooManyMethods:
|
81
|
+
enabled: false
|
82
|
+
exclude: []
|
83
|
+
max_methods: 15
|
84
|
+
TooManyStatements:
|
85
|
+
enabled: false
|
86
|
+
exclude:
|
87
|
+
- initialize
|
88
|
+
max_statements: 40
|
89
|
+
UncommunicativeMethodName:
|
90
|
+
enabled: true
|
91
|
+
exclude: []
|
92
|
+
reject:
|
93
|
+
- !ruby/regexp /^[a-z]$/
|
94
|
+
- !ruby/regexp /[0-9]$/
|
95
|
+
- !ruby/regexp /[A-Z]/
|
96
|
+
accept: []
|
97
|
+
UncommunicativeModuleName:
|
98
|
+
enabled: true
|
99
|
+
exclude: []
|
100
|
+
reject:
|
101
|
+
- !ruby/regexp /^.$/
|
102
|
+
- !ruby/regexp /[0-9]$/
|
103
|
+
accept: []
|
104
|
+
UncommunicativeParameterName:
|
105
|
+
enabled: true
|
106
|
+
exclude: []
|
107
|
+
reject:
|
108
|
+
- !ruby/regexp /^.$/
|
109
|
+
- !ruby/regexp /[0-9]$/
|
110
|
+
- !ruby/regexp /[A-Z]/
|
111
|
+
- !ruby/regexp /^_/
|
112
|
+
accept: []
|
113
|
+
UncommunicativeVariableName:
|
114
|
+
enabled: false
|
115
|
+
exclude: []
|
116
|
+
reject:
|
117
|
+
- !ruby/regexp /^.$/
|
118
|
+
- !ruby/regexp /[0-9]$/
|
119
|
+
- !ruby/regexp /[A-Z]/
|
120
|
+
accept:
|
121
|
+
- !ruby/regexp /^_$/
|
122
|
+
UnusedParameters:
|
123
|
+
enabled: true
|
124
|
+
exclude: []
|
125
|
+
UnusedPrivateMethod:
|
126
|
+
enabled: false
|
127
|
+
exclude: []
|
128
|
+
UtilityFunction:
|
129
|
+
enabled: true
|
130
|
+
exclude: []
|
131
|
+
public_methods_only: false
|