rubocop-packaging 0.4.0 → 0.5.0
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 +4 -1
- data/config/default.yml +22 -9
- data/lib/rubocop/cop/packaging/bundler_setup_in_tests.rb +14 -2
- data/lib/rubocop/cop/packaging/gemspec_git.rb +5 -3
- data/lib/rubocop/cop/packaging/{require_with_relative_path.rb → require_hardcoding_lib.rb} +22 -7
- data/lib/rubocop/cop/packaging/require_relative_hardcoding_lib.rb +14 -3
- data/lib/rubocop/cop/packaging_cops.rb +1 -1
- data/lib/rubocop/packaging/lib_helper_module.rb +6 -0
- data/lib/rubocop/packaging/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4e096b94cc72a619f1accaa3fda9021424a1954ddd3364d34df4c36e66cb8926
|
4
|
+
data.tar.gz: d96b87bbb45fd4448665e6578039f3c167818a78894066953cd4a87a0af3e2de
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2d5f7400a946fc39f6de1907f01445d13e3935299058db606edef6e1527dae2efeb944921bee5e7bce5dfddc73d8e4fd39c1cc3a16105b0e1dcdb550a8962e71
|
7
|
+
data.tar.gz: f122820131b25c3fe87ce4c4abe5cce1f9fa22bed5e0bbf60e5fe68273ca4f8a089a7479ca9bf11a85d34227cae8878fd6875c0b7a3216e0bb7377aee73b27ac
|
data/README.md
CHANGED
@@ -10,7 +10,10 @@ environment without any problems.
|
|
10
10
|
## Documentation
|
11
11
|
|
12
12
|
A detailed documentation, explaining what this extension is doing and the
|
13
|
-
reasoning behind it, can be found here:
|
13
|
+
reasoning behind it, can be found here: https://docs.rubocop.org/rubocop-packaging/
|
14
|
+
|
15
|
+
We also have a [packaging-style-guide](https://packaging.rubystyle.guide/),
|
16
|
+
listing some good and bad examples and the rationale behind these cops.
|
14
17
|
|
15
18
|
In case anything is not clear, please feel free to raise an issue, asking
|
16
19
|
for more explanation!
|
data/config/default.yml
CHANGED
@@ -1,23 +1,36 @@
|
|
1
1
|
# This is the default configuration file.
|
2
2
|
|
3
3
|
Packaging/BundlerSetupInTests:
|
4
|
-
Description:
|
4
|
+
Description: >-
|
5
|
+
Using `bundler/setup` in tests is redundant. Consider
|
6
|
+
removing it.
|
5
7
|
Enabled: true
|
6
8
|
VersionAdded: '0.4'
|
9
|
+
VersionChanged: '0.5'
|
7
10
|
|
8
11
|
Packaging/GemspecGit:
|
9
|
-
Description:
|
12
|
+
Description: >-
|
13
|
+
Using `bundler/setup` in tests is redundant. Consider
|
14
|
+
Avoid using git to produce lists of files. Downstreams
|
15
|
+
often need to build your package in an environment
|
16
|
+
that does not have git (on purpose). Use some pure
|
17
|
+
Ruby alternative, like `Dir` or `Dir.glob`.
|
10
18
|
Enabled: true
|
11
19
|
VersionAdded: '0.1'
|
12
20
|
VersionChanged: '0.1'
|
13
21
|
|
14
|
-
Packaging/
|
15
|
-
Description:
|
22
|
+
Packaging/RequireHardcodingLib:
|
23
|
+
Description: >-
|
24
|
+
Avoid using `require` with relative path to lib. Use
|
25
|
+
`require` with absolute path instead.
|
16
26
|
Enabled: true
|
17
|
-
VersionAdded: '0.
|
18
|
-
VersionChanged: '0.
|
27
|
+
VersionAdded: '0.4'
|
28
|
+
VersionChanged: '0.5'
|
19
29
|
|
20
|
-
Packaging/
|
21
|
-
Description:
|
30
|
+
Packaging/RequireRelativeHardcodingLib:
|
31
|
+
Description: >-
|
32
|
+
Avoid using `require_relative` with relative path to
|
33
|
+
lib. Use `require` with absolute path instead.
|
22
34
|
Enabled: true
|
23
|
-
VersionAdded: '0.
|
35
|
+
VersionAdded: '0.2'
|
36
|
+
VersionChanged: '0.5'
|
@@ -19,10 +19,12 @@ module RuboCop # :nodoc:
|
|
19
19
|
#
|
20
20
|
class BundlerSetupInTests < Base
|
21
21
|
include RuboCop::Packaging::LibHelperModule
|
22
|
+
include RangeHelp
|
23
|
+
extend AutoCorrector
|
22
24
|
|
23
25
|
# This is the message that will be displayed when RuboCop::Packaging finds
|
24
26
|
# an offense of using `require "bundler/setup"` in the tests directory.
|
25
|
-
MSG = "
|
27
|
+
MSG = "Using `bundler/setup` in tests is redundant. Consider removing it."
|
26
28
|
|
27
29
|
def_node_matcher :bundler_setup?, <<~PATTERN
|
28
30
|
(send nil? :require
|
@@ -45,7 +47,17 @@ module RuboCop # :nodoc:
|
|
45
47
|
def on_send(node)
|
46
48
|
return unless bundler_setup?(node)
|
47
49
|
|
48
|
-
add_offense(node)
|
50
|
+
add_offense(node) do |corrector|
|
51
|
+
autocorrect(corrector, node)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# Called from on_send, this method helps to autocorrect
|
56
|
+
# the offenses flagged by this cop.
|
57
|
+
def autocorrect(corrector, node)
|
58
|
+
range = range_by_whole_lines(node.source_range, include_final_newline: true)
|
59
|
+
|
60
|
+
corrector.remove(range)
|
49
61
|
end
|
50
62
|
|
51
63
|
# This method is called from inside `#def_node_matcher`.
|
@@ -29,6 +29,8 @@ module RuboCop # :nodoc:
|
|
29
29
|
# end
|
30
30
|
#
|
31
31
|
# # good
|
32
|
+
# require "rake/file_list"
|
33
|
+
#
|
32
34
|
# Gem::Specification.new do |spec|
|
33
35
|
# spec.files = Rake::FileList["**/*"].exclude(*File.read(".gitignore").split)
|
34
36
|
# end
|
@@ -51,9 +53,9 @@ module RuboCop # :nodoc:
|
|
51
53
|
# This is the message that will be displayed when RuboCop finds an
|
52
54
|
# offense of using `git ls-files`.
|
53
55
|
MSG = "Avoid using git to produce lists of files. " \
|
54
|
-
|
55
|
-
|
56
|
-
|
56
|
+
"Downstreams often need to build your package in an environment " \
|
57
|
+
"that does not have git (on purpose). " \
|
58
|
+
"Use some pure Ruby alternative, like `Dir` or `Dir.glob`."
|
57
59
|
|
58
60
|
def_node_search :xstr, <<~PATTERN
|
59
61
|
(block
|
@@ -34,18 +34,21 @@ module RuboCop # :nodoc:
|
|
34
34
|
# # good
|
35
35
|
# require "baz/qux"
|
36
36
|
#
|
37
|
-
class
|
37
|
+
class RequireHardcodingLib < Base
|
38
38
|
include RuboCop::Packaging::LibHelperModule
|
39
|
+
extend AutoCorrector
|
39
40
|
|
40
41
|
# This is the message that will be displayed when RuboCop::Packaging
|
41
42
|
# finds an offense of using `require` with relative path to lib.
|
42
|
-
MSG = "Avoid using `require` with relative path to `lib/`."
|
43
|
+
MSG = "Avoid using `require` with relative path to `lib/`. " \
|
44
|
+
"Use `require` with absolute path instead."
|
43
45
|
|
44
46
|
def_node_matcher :require?, <<~PATTERN
|
45
47
|
{(send nil? :require (str #falls_in_lib?))
|
46
48
|
(send nil? :require (send (const nil? :File) :expand_path (str #falls_in_lib?) (send nil? :__dir__)))
|
47
49
|
(send nil? :require (send (const nil? :File) :expand_path (str #falls_in_lib_using_file?) (str _)))
|
48
|
-
(send nil? :require (send (send (const nil? :File) :dirname {(str _) (send nil? _)}) :+ (str #falls_in_lib_with_file_dirname_plus_str?)))
|
50
|
+
(send nil? :require (send (send (const nil? :File) :dirname {(str _) (send nil? _)}) :+ (str #falls_in_lib_with_file_dirname_plus_str?)))
|
51
|
+
(send nil? :require (dstr (begin (send (const nil? :File) :dirname {(str _) (send nil? _)})) (str #falls_in_lib_with_file_dirname_plus_str?)))}
|
49
52
|
PATTERN
|
50
53
|
|
51
54
|
# Extended from the Base class.
|
@@ -64,28 +67,40 @@ module RuboCop # :nodoc:
|
|
64
67
|
def on_send(node)
|
65
68
|
return unless require?(node)
|
66
69
|
|
67
|
-
add_offense(node)
|
70
|
+
add_offense(node) do |corrector|
|
71
|
+
corrector.replace(node, good_require_call)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
# Called from on_send, this method helps to replace
|
76
|
+
# the "bad" require call with the "good" one.
|
77
|
+
def good_require_call
|
78
|
+
good_call = @str.sub(%r{^.*/lib/}, "")
|
79
|
+
%(require "#{good_call}")
|
68
80
|
end
|
69
81
|
|
70
82
|
# This method is called from inside `#def_node_matcher`.
|
71
83
|
# It flags an offense if the `require` call is made from
|
72
84
|
# anywhere except the "lib" directory.
|
73
85
|
def falls_in_lib?(str)
|
74
|
-
|
86
|
+
@str = str
|
87
|
+
target_falls_in_lib?(str) && inspected_file_is_not_in_lib_or_gemspec?
|
75
88
|
end
|
76
89
|
|
77
90
|
# This method is called from inside `#def_node_matcher`.
|
78
91
|
# It flags an offense if the `require` call (using the __FILE__
|
79
92
|
# arguement) is made from anywhere except the "lib" directory.
|
80
93
|
def falls_in_lib_using_file?(str)
|
81
|
-
|
94
|
+
@str = str
|
95
|
+
target_falls_in_lib_using_file?(str) && inspected_file_is_not_in_lib_or_gemspec?
|
82
96
|
end
|
83
97
|
|
84
98
|
# This method preprends a "." to the string that starts with "/".
|
85
99
|
# And then determines if that call is made to "lib/".
|
86
100
|
def falls_in_lib_with_file_dirname_plus_str?(str)
|
101
|
+
@str = str
|
87
102
|
str.prepend(".")
|
88
|
-
target_falls_in_lib?(str)
|
103
|
+
target_falls_in_lib?(str) && inspected_file_is_not_in_lib_or_gemspec?
|
89
104
|
end
|
90
105
|
end
|
91
106
|
end
|
@@ -29,11 +29,12 @@ module RuboCop # :nodoc:
|
|
29
29
|
#
|
30
30
|
class RequireRelativeHardcodingLib < Base
|
31
31
|
include RuboCop::Packaging::LibHelperModule
|
32
|
+
extend AutoCorrector
|
32
33
|
|
33
34
|
# This is the message that will be displayed when RuboCop finds an
|
34
35
|
# offense of using `require_relative` with relative path to lib.
|
35
36
|
MSG = "Avoid using `require_relative` with relative path to lib. " \
|
36
|
-
|
37
|
+
"Use `require` with absolute path instead."
|
37
38
|
|
38
39
|
def_node_matcher :require_relative, <<~PATTERN
|
39
40
|
(send nil? :require_relative
|
@@ -56,14 +57,24 @@ module RuboCop # :nodoc:
|
|
56
57
|
def on_send(node)
|
57
58
|
return unless require_relative(node)
|
58
59
|
|
59
|
-
add_offense(node)
|
60
|
+
add_offense(node) do |corrector|
|
61
|
+
corrector.replace(node, good_require_call)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
# Called from on_send, this method helps to replace the
|
66
|
+
# "bad" require_relative call with the "good" one.
|
67
|
+
def good_require_call
|
68
|
+
good_call = File.expand_path(@str, @file_directory).delete_prefix("#{root_dir}/lib/")
|
69
|
+
%(require "#{good_call}")
|
60
70
|
end
|
61
71
|
|
62
72
|
# This method is called from inside `#def_node_matcher`.
|
63
73
|
# It flags an offense if the `require_relative` call is made
|
64
74
|
# from anywhere except the "lib" directory.
|
65
75
|
def falls_in_lib?(str)
|
66
|
-
|
76
|
+
@str = str
|
77
|
+
target_falls_in_lib?(str) && inspected_file_is_not_in_lib_or_gemspec?
|
67
78
|
end
|
68
79
|
end
|
69
80
|
end
|
@@ -2,5 +2,5 @@
|
|
2
2
|
|
3
3
|
require_relative "packaging/bundler_setup_in_tests"
|
4
4
|
require_relative "packaging/gemspec_git"
|
5
|
+
require_relative "packaging/require_hardcoding_lib"
|
5
6
|
require_relative "packaging/require_relative_hardcoding_lib"
|
6
|
-
require_relative "packaging/require_with_relative_path"
|
@@ -30,6 +30,12 @@ module RuboCop # :nodoc:
|
|
30
30
|
def inspected_file_is_gemspec?
|
31
31
|
@file_path.end_with?("gemspec")
|
32
32
|
end
|
33
|
+
|
34
|
+
# This method determines if the inspected file is not in lib/ or
|
35
|
+
# isn't a gemspec file.
|
36
|
+
def inspected_file_is_not_in_lib_or_gemspec?
|
37
|
+
!inspected_file_falls_in_lib? && !inspected_file_is_gemspec?
|
38
|
+
end
|
33
39
|
end
|
34
40
|
end
|
35
41
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubocop-packaging
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Utkarsh Gupta
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-09-
|
11
|
+
date: 2020-09-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bump
|
@@ -109,8 +109,8 @@ files:
|
|
109
109
|
- lib/rubocop-packaging.rb
|
110
110
|
- lib/rubocop/cop/packaging/bundler_setup_in_tests.rb
|
111
111
|
- lib/rubocop/cop/packaging/gemspec_git.rb
|
112
|
+
- lib/rubocop/cop/packaging/require_hardcoding_lib.rb
|
112
113
|
- lib/rubocop/cop/packaging/require_relative_hardcoding_lib.rb
|
113
|
-
- lib/rubocop/cop/packaging/require_with_relative_path.rb
|
114
114
|
- lib/rubocop/cop/packaging_cops.rb
|
115
115
|
- lib/rubocop/packaging.rb
|
116
116
|
- lib/rubocop/packaging/inject.rb
|
@@ -130,7 +130,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
130
130
|
requirements:
|
131
131
|
- - ">="
|
132
132
|
- !ruby/object:Gem::Version
|
133
|
-
version: 2.
|
133
|
+
version: 2.4.0
|
134
134
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
136
|
- - ">="
|