rubocop-packs 0.0.14 → 0.0.16

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: be0363ed2023527b2c25a80a934abac48fd8e75c5c9b8f3882e0391305f2544c
4
- data.tar.gz: 3a082b0eb17b5bf25a2cbba0fbe01322b7d56598512102551c87635bbaea2df9
3
+ metadata.gz: 82853530c4d01d7eb8f804f48eeb8b9558eb5d0fb006d5841c2c22f6265d5a38
4
+ data.tar.gz: 55fdebf202b61a5c09b6f2e125fe2821c756f0c7aa7f4b03e383750992c62764
5
5
  SHA512:
6
- metadata.gz: 06a8046673579208dbe40a4f46b9cb11ff7360af8712736b794b0e66cfc9ec0411f9cdf837bf2acfd03c2f11cbeb82b6ff9291ca768824ffe2fc19f0d15d7e17
7
- data.tar.gz: 9debb88541b7c1e9506078c4de88ca6507d6f2b3fab95226269c70265a438c15533f1fae6dfc7a13b0707a93ec269093ec3fe0561a06047c83d05ed7e635fa18
6
+ metadata.gz: 350a4b8cff981e078f6c87e3fece33ba40c678be475f305702398033b3856817ac7eb60e98268f8f10e58b7098f05bb622f77089cca1d20ce64d1faba37db663
7
+ data.tar.gz: bbc768b93c9f41cc886cdb8b1514d41cf8688a622ec4d6d4573eff06ef347eaf602751afc5ca6de663ff0564c33e263778b2eeae3933142b5831027518e8c776
data/README.md CHANGED
@@ -23,59 +23,68 @@ You need to tell RuboCop to load the Packs extension. There are three ways to do
23
23
 
24
24
  Put this into your `.rubocop.yml`:
25
25
 
26
- ```yaml
27
- require: rubocop-packs
28
- ```
29
-
30
- Alternatively, use the following array notation when specifying multiple extensions:
31
-
32
26
  ```yaml
33
27
  require:
34
- - rubocop-other-extension
35
28
  - rubocop-packs
36
29
  ```
37
30
 
38
31
  Now you can run `rubocop` and it will automatically load the RuboCop Packs cops together with the standard cops.
39
32
 
40
- ### Command line
41
-
42
- ```sh
43
- rubocop --require rubocop-packs
44
- ```
45
-
46
- ### Rake task
47
-
48
- ```ruby
49
- RuboCop::RakeTask.new do |task|
50
- task.requires << 'rubocop-packs'
51
- end
52
- ```
53
-
54
33
  ## The Cops
55
34
  All cops are located under [`lib/rubocop/cop/packs`](lib/rubocop/cop/packs), and contain examples/documentation.
56
35
 
57
36
  In your `.rubocop.yml`, you may treat the Packs cops just like any other cop. For example:
58
37
 
59
38
  ```yaml
60
- Packs/NamespacedUnderPackageName:
39
+ Packs/NamespaceConvention:
61
40
  Exclude:
62
41
  - lib/example.rb
63
42
  ```
64
43
 
65
- ## Other Utilities
44
+ ## Pack-Level `.rubocop.yml` and `.rubocop_todo.yml` files
66
45
  `rubocop-packs` also has some API that help you use rubocop in a pack-based context.
67
46
 
68
- ### `RuboCop::Packs.auto_generate_rubocop_todo(packs: ParsePackwerk.all)`
69
- This API will auto-generate a `packs/some_pack/.rubocop_todo.yml`. This allows a pack to own its own exception list. Note that you need to configure `rubocop-packs` with an allow list of cops that can live in per-pack `.rubocop_todo.yml` files:
47
+ ### Per-pack `.rubocop.yml`
48
+ While `rubocop-packs` can be used like any other `rubocop` by configuring in your top-level `.rubocop.yml` file, we also have a number of tools to support per-pack configuration.
49
+
50
+ To add a per-pack `.rubocop.yml`, you just need to create a `packs/your_pack/.rubocop.yml` and then include:
51
+ ```yml
52
+ inherit_from: '../../.rubocop.yml'
53
+ ```
54
+
55
+ Note though that inherited paths are relative to your pack-level `.rubocop.yml`. To avoid that, you can rename your `.rubocop.yml` to `.inherited_rubocop.yml`, set `.rubocop.yml` to:
56
+ ```
57
+ inherit_from: '.inherited_rubocop.yml'
58
+ ```
59
+ And then similarly change the `inherit_from` in `packs/your_pack/.rubocop.yml`.
60
+
61
+ ### Per-pack `.rubocop_todo.yml`
62
+ To create a per-pack `.rubocop_todo.yml`, you can use the following API from `rubocop-packs`:
63
+ ```ruby
64
+ RuboCop::Packs.auto_generate_rubocop_todo(packs: ParsePackwerk.all)
70
65
  ```
71
- # `config/rubocop_packs.rb`
66
+ This API will auto-generate a `packs/some_pack/.rubocop_todo.yml`. This allows a pack to own its own exception list.
67
+
68
+ ### Configuration and Validation
69
+ To use per-pack `.rubocop.yml` and `.rubocop_todo.yml` files, you need to configure `rubocop-packs`:
70
+ ```ruby
71
+ # config/rubocop_packs.rb
72
72
  RuboCop::Packs.configure do |config|
73
- # For example:
74
73
  config.permitted_pack_level_cops = ['Packs/NamespaceConvention']
74
+ config.required_pack_level_cops = ['Packs/NamespaceConvention']
75
+ end
76
+ ```
77
+
78
+ The above two settings have associated validations that run with `RuboCop::Packs.validate`, which returns an array of errors. We recommend validating this in your test suite, for example:
79
+ ```ruby
80
+ RSpec.describe 'rubocop-packs validations' do
81
+ it { expect(RuboCop::Packs.validate).to be_empty }
75
82
  end
76
83
  ```
77
84
 
78
- There is a supporting validation to ensure these `packs/*/.rubocop_todo.yml` files only add exceptions to the allow listed set of rules. Run this validation with `RuboCop::packs.validate`, which returns an array of errors.
85
+ Validations include:
86
+ - Ensuring that `packs/*/.rubocop_todo.yml` files only contain exceptions for the allow-list of `permitted_pack_level_cops`
87
+ - Ensuring that `packs/*/.rubocop.yml` files contain all of the cops listed in `required_pack_level_cops` and no other cops. This is to ensure that these files are only used to turn on and off an allow-list of cops, as most users would not want packs to configure most `rubocop` rules in a way that is different from the rest of the application.
79
88
 
80
89
  ## Contributing
81
90
 
@@ -20,7 +20,7 @@ module RuboCop
20
20
  return if @loaded_client_configuration
21
21
 
22
22
  @loaded_client_configuration = true
23
- client_configuration = Pathname.pwd.join('config/rubocop_packs.rb')
23
+ client_configuration = Bundler.root.join('config/rubocop_packs.rb')
24
24
  require client_configuration.to_s if client_configuration.exist?
25
25
  end
26
26
 
@@ -85,6 +85,8 @@ module RuboCop
85
85
  end
86
86
 
87
87
  loaded_rubocop_yml.each_key do |key|
88
+ next if key.to_s == 'inherit_from'
89
+
88
90
  if !Packs.config.permitted_pack_level_cops.include?(key)
89
91
  errors << <<~ERROR_MESSAGE
90
92
  #{rubocop_yml} contains invalid configuration for #{key}.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop-packs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.14
4
+ version: 0.0.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gusto Engineers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-11-01 00:00:00.000000000 Z
11
+ date: 2022-11-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport