boxt_ruby_style_guide 7.4.0 → 7.7.3
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/README.md +13 -5
- data/VERSION +1 -1
- data/default.yml +5 -5
- data/lib/boxt_ruby_style_guide/filepath_matcher.rb +44 -0
- data/lib/boxt_ruby_style_guide/git_diff.rb +38 -0
- data/lib/tasks/lint.rake +35 -42
- metadata +52 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bb14b8f791b4feded3f27f40c3bb50de7087c97f6c68177831a0d480e52e3860
|
4
|
+
data.tar.gz: db0f26c2a9cd3f5dc8137a74c03819f0744a09c64be7cdad45eb250994dd2ee3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 07e967593138ce3ac4fe0aea5f6eca2a53c46611e2a3694a3a582abd0d5e52fcbb1a461d8e3917d2fecdae8529f70be656bc849bdaed13391695cfa6f2c027ca
|
7
|
+
data.tar.gz: 301463c3158cc8f859b408fbf8a0fc8a4c4cb8bcb102d64d7af2ab0a53d606753c1b61e574b6cea6eaa8d4ce1b44b44358ad8b59a349e21886889737b5725155
|
data/README.md
CHANGED
@@ -41,10 +41,10 @@ Add a `.rubocop.yml` file to the root of your project with the following setting
|
|
41
41
|
inherit_gem:
|
42
42
|
boxt_ruby_style_guide:
|
43
43
|
- default.yml # use default cops
|
44
|
-
- pending.yml # use pending cops
|
44
|
+
- pending.yml # use pending cops
|
45
45
|
- rails.yml # use Rails cops - see Additional Extensions/Cops
|
46
|
-
- rails-pending.yml # use pending rails cops
|
47
|
-
- rspec.yml # use rspec cops
|
46
|
+
- rails-pending.yml # use pending rails cops
|
47
|
+
- rspec.yml # use rspec cops
|
48
48
|
```
|
49
49
|
|
50
50
|
### Additional Extensions/Cops
|
@@ -60,7 +60,7 @@ To enable add the following to your `.rubocop.yml` file.
|
|
60
60
|
```yml
|
61
61
|
inherit_gem:
|
62
62
|
boxt_ruby_style_guide:
|
63
|
-
# .... add cops
|
63
|
+
# .... add cops
|
64
64
|
|
65
65
|
require:
|
66
66
|
- rubocop-faker # if your project is using the Faker gem then add this
|
@@ -75,9 +75,17 @@ Lint tasks to run against files listed as changed by Git.
|
|
75
75
|
To run `rubocop` against any changed files use:
|
76
76
|
|
77
77
|
```sh
|
78
|
-
rake lint:rubocop
|
78
|
+
rake lint:rubocop RUBOCOP_LINT_BASE=your-base-branch
|
79
79
|
```
|
80
80
|
|
81
|
+
To run `rubocop` with autofix, use one of the following:
|
82
|
+
|
83
|
+
```sh
|
84
|
+
rake lint:rubocop_a RUBOCOP_LINT_BASE=your-base-branch
|
85
|
+
rake lint:rubocop_A RUBOCOP_LINT_BASE=your-base-branch
|
86
|
+
```
|
87
|
+
|
88
|
+
|
81
89
|
If there are no changed files the commands will run against all files.
|
82
90
|
|
83
91
|
## Editor Plugins
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
7.
|
1
|
+
7.7.3
|
data/default.yml
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
AllCops:
|
2
2
|
Exclude:
|
3
3
|
- "**/*/schema.rb"
|
4
|
-
- Gemfile.lock
|
5
|
-
- node_modules/**/*
|
6
|
-
- tmp/**/*
|
7
|
-
- vendor/**/*
|
8
|
-
TargetRubyVersion: 2.7.
|
4
|
+
- "Gemfile.lock"
|
5
|
+
- "node_modules/**/*"
|
6
|
+
- "tmp/**/*"
|
7
|
+
- "vendor/**/*"
|
8
|
+
TargetRubyVersion: 2.7.2
|
9
9
|
Layout/LineLength:
|
10
10
|
Exclude:
|
11
11
|
- config/routes.rb
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BoxtRubyStyleGuide
|
4
|
+
##
|
5
|
+
# Sanitizes a list of filepaths based on Rubocops exclusions
|
6
|
+
class FilepathMatcher
|
7
|
+
require "yaml"
|
8
|
+
|
9
|
+
##
|
10
|
+
# Compare a given filepath with a grep-style filename pattern
|
11
|
+
FILEPATH_PATTERN_MATCH = proc do |filepath, pattern|
|
12
|
+
File.fnmatch(pattern, filepath, File::FNM_PATHNAME)
|
13
|
+
end
|
14
|
+
|
15
|
+
##
|
16
|
+
# Array of file patterns to make sure we only check files that are Ruby files
|
17
|
+
INCLUDE_PATTERNS = %w[
|
18
|
+
Gemfile
|
19
|
+
Rakefile
|
20
|
+
*.gemspec
|
21
|
+
**/*.rb
|
22
|
+
**/*.rake
|
23
|
+
].freeze
|
24
|
+
|
25
|
+
##
|
26
|
+
# Array of the excluded files from Rubocop default.yml config
|
27
|
+
EXCLUDE_PATTERNS = YAML.load_file(
|
28
|
+
BoxtRubyStyleGuide.root.join("default.yml")
|
29
|
+
).dig("AllCops", "Exclude")
|
30
|
+
|
31
|
+
attr_reader :filepaths
|
32
|
+
|
33
|
+
def initialize(*filepaths)
|
34
|
+
@filepaths = filepaths
|
35
|
+
end
|
36
|
+
|
37
|
+
def all_matches
|
38
|
+
filepaths.select do |filepath|
|
39
|
+
filepath_proc = FILEPATH_PATTERN_MATCH.curry.call(filepath)
|
40
|
+
INCLUDE_PATTERNS.any?(filepath_proc) && EXCLUDE_PATTERNS.none?(filepath_proc)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BoxtRubyStyleGuide
|
4
|
+
# Returns a list of files that have changed, as detected by `git-diff`
|
5
|
+
#
|
6
|
+
# TODO: Write tests for this to ensure we're pulling the desired diff files
|
7
|
+
# see: https://github.com/ruby-git/ruby-git
|
8
|
+
class GitDiff
|
9
|
+
require "git"
|
10
|
+
|
11
|
+
##
|
12
|
+
# List of Git statuses we should test
|
13
|
+
# See: https://git-scm.com/docs/git-status#_short_format
|
14
|
+
TEST_STATUSES = %w[M A U].freeze
|
15
|
+
|
16
|
+
attr_reader :base
|
17
|
+
|
18
|
+
def initialize(base = "master")
|
19
|
+
@base = base
|
20
|
+
end
|
21
|
+
|
22
|
+
##
|
23
|
+
# A list of the local file paths of Ruby files with committed changes.
|
24
|
+
#
|
25
|
+
# Returns Array
|
26
|
+
def all
|
27
|
+
@all ||= begin
|
28
|
+
git.diff(base).name_status.select { |_, stat| TEST_STATUSES.include?(stat) }.keys
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def git
|
35
|
+
@git ||= Git.open(".")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/tasks/lint.rake
CHANGED
@@ -3,60 +3,53 @@
|
|
3
3
|
require "boxt_ruby_style_guide"
|
4
4
|
require "rubocop"
|
5
5
|
|
6
|
+
require "boxt_ruby_style_guide/git_diff"
|
7
|
+
require "boxt_ruby_style_guide/filepath_matcher"
|
8
|
+
|
6
9
|
##
|
7
10
|
# The base branch to compare HEAD with for changes
|
8
11
|
BASE_BRANCH = "develop"
|
9
12
|
|
10
13
|
##
|
11
|
-
#
|
12
|
-
|
14
|
+
# Name of the master Rubocop lint task to run
|
15
|
+
RUBOCOP_TASK_NAME = :"lint:execute_rubocop"
|
13
16
|
|
14
17
|
##
|
15
|
-
#
|
16
|
-
|
17
|
-
#
|
18
|
-
# - Gemfile
|
19
|
-
# - Rakefile
|
20
|
-
# - *.gemspec
|
21
|
-
# - app/**/*.{rb,rake}
|
22
|
-
# - lib/**/*.{rb,rake}
|
23
|
-
# - test/**/*.{rb,rake}
|
24
|
-
# - spec/**/*.{rb,rake}
|
25
|
-
#
|
26
|
-
GREP_PATTERN = <<~STRING.delete("\n")
|
27
|
-
(
|
28
|
-
(#{RUBY_DIRS.join('|')})\\/.+\\.(rb|rake)
|
29
|
-
|^
|
30
|
-
(Gemfile|Rakefile|.+\\.gemspec)
|
31
|
-
)
|
32
|
-
STRING
|
18
|
+
# Pattern for matching autofix options
|
19
|
+
AUTO_REGEX = /\A-a\Z/i.freeze
|
33
20
|
|
34
21
|
namespace :lint do
|
35
22
|
desc "Runs rubocop against all files with committed changes different from base branch"
|
36
23
|
task :rubocop do
|
37
|
-
|
24
|
+
Rake::Task[RUBOCOP_TASK_NAME].invoke
|
25
|
+
end
|
26
|
+
|
27
|
+
desc "Runs rubocop against all files using -a (soft autofix) option"
|
28
|
+
task :rubocop_a do
|
29
|
+
Rake::Task[RUBOCOP_TASK_NAME].invoke("-a")
|
30
|
+
end
|
31
|
+
|
32
|
+
desc "Runs rubocop against all files using -A (hard autofix) option"
|
33
|
+
task :rubocop_A do
|
34
|
+
Rake::Task[RUBOCOP_TASK_NAME].invoke("-A")
|
38
35
|
end
|
39
36
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
#
|
49
|
-
# Pipe the output from this command through grep to match only Ruby files in the
|
50
|
-
# desired directories
|
51
|
-
#
|
52
|
-
# Returns String
|
53
|
-
def diff_file_paths
|
54
|
-
base_branch = ENV.fetch("RUBOCOP_LINT_BASE", BASE_BRANCH)
|
55
|
-
command = <<~BASH
|
56
|
-
git diff-tree -r --name-only --diff-filter=d #{base_branch} HEAD \
|
57
|
-
| egrep '#{GREP_PATTERN}'
|
58
|
-
BASH
|
59
|
-
file_paths = `#{command}`
|
60
|
-
file_paths.gsub(/\n|\r/, " ")
|
37
|
+
task :execute_rubocop, [:auto_flag] do |_t, args|
|
38
|
+
if sanitized_file_paths.any?
|
39
|
+
# Sanitize args to make sure only a single "a" or "A" is accepted
|
40
|
+
auto_flag = AUTO_REGEX.match(args[:auto_flag])
|
41
|
+
exec("bundle exec rubocop #{sanitized_file_paths.join(" ")} #{auto_flag}".strip)
|
42
|
+
else
|
43
|
+
puts "No matching Ruby files changed"
|
44
|
+
end
|
61
45
|
end
|
62
46
|
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
# Returns Array
|
51
|
+
def sanitized_file_paths
|
52
|
+
base = ENV.fetch("RUBOCOP_LINT_BASE", BASE_BRANCH)
|
53
|
+
changed_files = BoxtRubyStyleGuide::GitDiff.new(base).all
|
54
|
+
BoxtRubyStyleGuide::FilepathMatcher.new(*changed_files).all_matches
|
55
|
+
end
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: boxt_ruby_style_guide
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.
|
4
|
+
version: 7.7.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Boxt
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-10-
|
11
|
+
date: 2020-10-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: git
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.4.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.4.0
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: rubocop
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -31,6 +45,9 @@ dependencies:
|
|
31
45
|
- - ">"
|
32
46
|
- !ruby/object:Gem::Version
|
33
47
|
version: '5'
|
48
|
+
- - "<"
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: '7'
|
34
51
|
type: :development
|
35
52
|
prerelease: false
|
36
53
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -38,6 +55,9 @@ dependencies:
|
|
38
55
|
- - ">"
|
39
56
|
- !ruby/object:Gem::Version
|
40
57
|
version: '5'
|
58
|
+
- - "<"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '7'
|
41
61
|
- !ruby/object:Gem::Dependency
|
42
62
|
name: rubocop-faker
|
43
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,6 +114,34 @@ dependencies:
|
|
94
114
|
- - "~>"
|
95
115
|
- !ruby/object:Gem::Version
|
96
116
|
version: '2.1'
|
117
|
+
- !ruby/object:Gem::Dependency
|
118
|
+
name: bundler-audit
|
119
|
+
requirement: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - "~>"
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: 0.7.0.1
|
124
|
+
type: :development
|
125
|
+
prerelease: false
|
126
|
+
version_requirements: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - "~>"
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: 0.7.0.1
|
131
|
+
- !ruby/object:Gem::Dependency
|
132
|
+
name: byebug
|
133
|
+
requirement: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - ">="
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: '0'
|
138
|
+
type: :development
|
139
|
+
prerelease: false
|
140
|
+
version_requirements: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - ">="
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '0'
|
97
145
|
- !ruby/object:Gem::Dependency
|
98
146
|
name: rake
|
99
147
|
requirement: !ruby/object:Gem::Requirement
|
@@ -164,6 +212,8 @@ files:
|
|
164
212
|
- VERSION
|
165
213
|
- default.yml
|
166
214
|
- lib/boxt_ruby_style_guide.rb
|
215
|
+
- lib/boxt_ruby_style_guide/filepath_matcher.rb
|
216
|
+
- lib/boxt_ruby_style_guide/git_diff.rb
|
167
217
|
- lib/boxt_ruby_style_guide/railtie.rb
|
168
218
|
- lib/boxt_ruby_style_guide/version.rb
|
169
219
|
- lib/tasks/lint.rake
|