rubocop-packaging 0.1.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 +7 -0
- data/LICENSE +25 -0
- data/README.md +86 -0
- data/config/default.yml +6 -0
- data/lib/rubocop-packaging.rb +11 -0
- data/lib/rubocop/cop/packaging/gemspec_git.rb +89 -0
- data/lib/rubocop/cop/packaging_cops.rb +3 -0
- data/lib/rubocop/packaging.rb +14 -0
- data/lib/rubocop/packaging/inject.rb +18 -0
- data/lib/rubocop/packaging/version.rb +7 -0
- metadata +140 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 7763971e3ccedea64e6db97b4ec6351d489b99fe36110f4d01374a67bce0c0d1
|
4
|
+
data.tar.gz: 4e4e52ee808aba2ba256a757c225802cff30bafe9521ec33a259dbfe7f037e42
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c2cdd53a7671b724141244e0efec24e8a4eeffbe3a4e9830b3eb6b80fbf487f74649e552b465b6b17f537d985278d7da38bba14fc9a816d781adee54aefb55d3
|
7
|
+
data.tar.gz: 9f16cf74a99ab1d56e01ad056440d2329013a441a62618eccc4e1ee2a6052ed7df4fd5565f095468feb7739c863ca957f9199a8a4e3c8db1de92958e5bf802c6
|
data/LICENSE
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
MIT License
|
2
|
+
===========
|
3
|
+
|
4
|
+
Copyright (©) 2020 Utkarsh Gupta <utkarsh@debian.org>
|
5
|
+
|
6
|
+
Permission is hereby granted, free of charge, to any person
|
7
|
+
obtaining a copy of this software and associated documentation
|
8
|
+
files (the "Software"), to deal in the Software without
|
9
|
+
restriction, including without limitation the rights to use,
|
10
|
+
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
11
|
+
copies of the Software, and to permit persons to whom the
|
12
|
+
Software is furnished to do so, subject to the following
|
13
|
+
conditions:
|
14
|
+
|
15
|
+
The above copyright notice and this permission notice shall be
|
16
|
+
included in all copies or substantial portions of the Software.
|
17
|
+
|
18
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
19
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
20
|
+
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
21
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
22
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
23
|
+
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
24
|
+
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
25
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
# RuboCop::Packaging
|
2
|
+
|
3
|
+
`RuboCop::Packaging` is an extension of [RuboCop](https://rubocop.org/),
|
4
|
+
which is a Ruby static code analyzer (a.k.a. linter) and code formatter.
|
5
|
+
|
6
|
+
It helps enforcing some of the guidelines that are expected of upstream
|
7
|
+
maintainers so that the downstream can build their packages in a clean
|
8
|
+
environment without any problems.
|
9
|
+
Some of the other basic guidelines can be found
|
10
|
+
[here](https://wiki.debian.org/Teams/Ruby/RubyExtras/UpstreamDevelopers).
|
11
|
+
|
12
|
+
## Installation
|
13
|
+
|
14
|
+
Add this line to your application's Gemfile:
|
15
|
+
|
16
|
+
```ruby
|
17
|
+
gem 'rubocop-packaging'
|
18
|
+
```
|
19
|
+
|
20
|
+
And then execute:
|
21
|
+
|
22
|
+
```bash
|
23
|
+
$ bundle install
|
24
|
+
```
|
25
|
+
|
26
|
+
Or install it yourself as:
|
27
|
+
|
28
|
+
```bash
|
29
|
+
$ gem install rubocop-packaging
|
30
|
+
```
|
31
|
+
|
32
|
+
## Usage
|
33
|
+
|
34
|
+
You need to tell RuboCop to load the Packaging extension. There are three
|
35
|
+
ways to do this:
|
36
|
+
|
37
|
+
### RuboCop configuration file
|
38
|
+
|
39
|
+
Put this into your `.rubocop.yml` file:
|
40
|
+
|
41
|
+
```yaml
|
42
|
+
require: rubocop-packaging
|
43
|
+
```
|
44
|
+
|
45
|
+
Alternatively, use the following array notation when specifying multiple
|
46
|
+
extensions:
|
47
|
+
|
48
|
+
```yaml
|
49
|
+
require:
|
50
|
+
- rubocop-other-extension
|
51
|
+
- rubocop-packaging
|
52
|
+
```
|
53
|
+
|
54
|
+
Now you can run `rubocop` and it will automatically load the RuboCop Packaging
|
55
|
+
cops together with the standard cops.
|
56
|
+
|
57
|
+
### Command line
|
58
|
+
|
59
|
+
```bash
|
60
|
+
rubocop --require rubocop-packaging
|
61
|
+
```
|
62
|
+
|
63
|
+
### Rake task
|
64
|
+
|
65
|
+
```ruby
|
66
|
+
RuboCop::RakeTask.new do |task|
|
67
|
+
task.requires << 'rubocop-packaging'
|
68
|
+
end
|
69
|
+
```
|
70
|
+
|
71
|
+
## Development
|
72
|
+
|
73
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then,
|
74
|
+
run `rake spec` to run the tests. You can also run `bin/console` for an
|
75
|
+
interactive prompt that will allow you to experiment.
|
76
|
+
|
77
|
+
To install this gem onto your local machine, run `bundle exec rake install`.
|
78
|
+
|
79
|
+
## Contributing
|
80
|
+
|
81
|
+
As always, bug reports and pull requests are heartily welcomed! 💖
|
82
|
+
This project is intended to be a safe and welcoming space for collaboration.
|
83
|
+
|
84
|
+
## License
|
85
|
+
`rubocop-packaging` is available as open-source under the
|
86
|
+
[MIT License](https://github.com/utkarsh2102/rubocop-packaging/blob/master/LICENSE).
|
data/config/default.yml
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rubocop'
|
4
|
+
|
5
|
+
require_relative 'rubocop/packaging'
|
6
|
+
require_relative 'rubocop/packaging/version'
|
7
|
+
require_relative 'rubocop/packaging/inject'
|
8
|
+
|
9
|
+
RuboCop::Packaging::Inject.defaults!
|
10
|
+
|
11
|
+
require_relative 'rubocop/cop/packaging_cops'
|
@@ -0,0 +1,89 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop # :nodoc:
|
4
|
+
module Cop # :nodoc:
|
5
|
+
module Packaging # :nodoc:
|
6
|
+
# This cop is used to identify the usage of `git ls-files`
|
7
|
+
# and suggests to use a plain Ruby alternative, like `Dir`,
|
8
|
+
# `Dir.glob` or `Rake::FileList` instead.
|
9
|
+
#
|
10
|
+
# @example
|
11
|
+
#
|
12
|
+
# # bad
|
13
|
+
# Gem::Specification.new do |spec|
|
14
|
+
# spec.files = `git ls-files`.split('\n')
|
15
|
+
# end
|
16
|
+
#
|
17
|
+
# # bad
|
18
|
+
# Gem::Specification.new do |spec|
|
19
|
+
# spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
20
|
+
# `git ls-files -z`.split('\\x0').reject { |f| f.match(%r{^(test|spec|features)/}) }
|
21
|
+
# end
|
22
|
+
# end
|
23
|
+
#
|
24
|
+
# # bad
|
25
|
+
# Gem::Specification.new do |spec|
|
26
|
+
# spec.files = `git ls-files`.split('\n')
|
27
|
+
# spec.test_files = `git ls-files -- test/{functional,unit}/*`.split('\n')
|
28
|
+
# spec.executables = `git ls-files -- bin/*`.split('\n').map{ |f| File.basename(f) }
|
29
|
+
# end
|
30
|
+
#
|
31
|
+
# # good
|
32
|
+
# Gem::Specification.new do |spec|
|
33
|
+
# spec.files = Dir['lib/**/*', 'LICENSE', 'README.md']
|
34
|
+
# spec.test_files = Dir['spec/**/*']
|
35
|
+
# end
|
36
|
+
#
|
37
|
+
# # good
|
38
|
+
# Gem::Specification.new do |spec|
|
39
|
+
# spec.files = Rake::FileList['**/*'].exclude(*File.read('.gitignore').split)
|
40
|
+
# end
|
41
|
+
#
|
42
|
+
# # good
|
43
|
+
# Gem::Specification.new do |spec|
|
44
|
+
# spec.files = Dir.glob('lib/**/*')
|
45
|
+
# spec.test_files = Dir.glob('test/{functional,test}/*')
|
46
|
+
# spec.executables = Dir.glob('bin/*').map{ |f| File.basename(f) }
|
47
|
+
# end
|
48
|
+
#
|
49
|
+
class GemspecGit < Cop
|
50
|
+
# This is the message that will be displayed when RuboCop finds an
|
51
|
+
# offense of using `git ls-files`.
|
52
|
+
MSG = 'Avoid using git to produce lists of files. ' \
|
53
|
+
'Downstreams often need to build your package in an environment ' \
|
54
|
+
'that does not have git (on purpose). ' \
|
55
|
+
'Use some pure Ruby alternative, like `Dir` or `Dir.glob`.'
|
56
|
+
|
57
|
+
def_node_search :xstr, <<~PATTERN
|
58
|
+
(block
|
59
|
+
(send
|
60
|
+
(const
|
61
|
+
(const {cbase nil?} :Gem) :Specification) :new)
|
62
|
+
(args
|
63
|
+
(arg _)) `$(xstr (str #starts_with_git?)))
|
64
|
+
PATTERN
|
65
|
+
|
66
|
+
# Extended from the Cop class.
|
67
|
+
# More about the `#investigate` method can be found here:
|
68
|
+
# https://github.com/rubocop-hq/rubocop/blob/59543c8e2b66bff249de131fa9105f3eb11e9edb/lib/rubocop/cop/cop.rb#L13-L25
|
69
|
+
#
|
70
|
+
# Processing of the AST happens here.
|
71
|
+
def investigate(processed_source)
|
72
|
+
xstr(processed_source.ast).each do |node|
|
73
|
+
add_offense(
|
74
|
+
processed_source.ast,
|
75
|
+
location: node.loc.expression,
|
76
|
+
message: MSG
|
77
|
+
)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
# This method is called from inside `#def_node_search`.
|
82
|
+
# It is used to find strings which start with 'git'.
|
83
|
+
def starts_with_git?(str)
|
84
|
+
str.start_with?('git')
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rubocop/packaging/version'
|
4
|
+
|
5
|
+
module RuboCop
|
6
|
+
# RuboCop Packaging project namespace
|
7
|
+
module Packaging
|
8
|
+
PROJECT_ROOT = Pathname.new(__dir__).parent.parent.expand_path.freeze
|
9
|
+
CONFIG_DEFAULT = PROJECT_ROOT.join('config', 'default.yml').freeze
|
10
|
+
CONFIG = YAML.safe_load(CONFIG_DEFAULT.read).freeze
|
11
|
+
|
12
|
+
private_constant(:CONFIG_DEFAULT, :PROJECT_ROOT)
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Packaging
|
5
|
+
# Because RuboCop doesn't yet support plugins, we have to monkey patch in a
|
6
|
+
# bit of our configuration.
|
7
|
+
module Inject
|
8
|
+
def self.defaults!
|
9
|
+
path = CONFIG_DEFAULT.to_s
|
10
|
+
hash = ConfigLoader.send(:load_yaml_configuration, path)
|
11
|
+
config = Config.new(hash, path).tap(&:make_excludes_absolute)
|
12
|
+
puts "configuration from #{path}" if ConfigLoader.debug?
|
13
|
+
config = ConfigLoader.merge_with_default(config, path)
|
14
|
+
ConfigLoader.instance_variable_set(:@default_configuration, config)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
metadata
ADDED
@@ -0,0 +1,140 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rubocop-packaging
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Utkarsh Gupta
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-06-17 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bump
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.8.0
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.8.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: pry
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.13.0
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.13.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '13.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '13.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '3.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: yard
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.9'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.9'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rubocop
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 0.75.0
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 0.75.0
|
97
|
+
description: |
|
98
|
+
A collection of RuboCop cops to check for downstream compatability issues in the
|
99
|
+
Ruby code.
|
100
|
+
email:
|
101
|
+
- utkarsh@debian.org
|
102
|
+
executables: []
|
103
|
+
extensions: []
|
104
|
+
extra_rdoc_files: []
|
105
|
+
files:
|
106
|
+
- LICENSE
|
107
|
+
- README.md
|
108
|
+
- config/default.yml
|
109
|
+
- lib/rubocop-packaging.rb
|
110
|
+
- lib/rubocop/cop/packaging/gemspec_git.rb
|
111
|
+
- lib/rubocop/cop/packaging_cops.rb
|
112
|
+
- lib/rubocop/packaging.rb
|
113
|
+
- lib/rubocop/packaging/inject.rb
|
114
|
+
- lib/rubocop/packaging/version.rb
|
115
|
+
homepage: https://github.com/utkarsh2102/rubocop-packaging
|
116
|
+
licenses:
|
117
|
+
- MIT
|
118
|
+
metadata:
|
119
|
+
homepage_uri: https://github.com/utkarsh2102/rubocop-packaging
|
120
|
+
source_code_uri: https://github.com/utkarsh2102/rubocop-packaging
|
121
|
+
post_install_message:
|
122
|
+
rdoc_options: []
|
123
|
+
require_paths:
|
124
|
+
- lib
|
125
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
126
|
+
requirements:
|
127
|
+
- - ">="
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: 2.3.0
|
130
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
131
|
+
requirements:
|
132
|
+
- - ">="
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: '0'
|
135
|
+
requirements: []
|
136
|
+
rubygems_version: 3.1.2
|
137
|
+
signing_key:
|
138
|
+
specification_version: 4
|
139
|
+
summary: Automatic downstream compatability checking tool for Ruby code
|
140
|
+
test_files: []
|