standard 1.21.0 → 1.22.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3b81947d8fd0c0d0ac932f947406aa3ecaa893f26861d143895c4c17d5174e12
4
- data.tar.gz: 451ce5e6c758f9d12539e6ae7ee877ea3597c6cb876994e192d5ccc54bc3d453
3
+ metadata.gz: 0be084d42bce81134fcc2055df53cd9a3b639814b7e64f91e3c2e05faa4675ce
4
+ data.tar.gz: f4c0f98c8b6597cbd136e2990f50767892ba2797d9b351ec8e3e277ff7d67910
5
5
  SHA512:
6
- metadata.gz: 4b25fcaa73ce0ec0ac525497f600a8d7c37c36e780c7d913d84e1837fa77d3551ed75890b069312950a81b00376725080b0272639be67ca8e1741f9f4cb9b91c
7
- data.tar.gz: cca1619ce8107cb4e8d2a5156846272759643dd1031e4fe53671ec4c8f7ae7e7f31d01ec49499ef407de6a11b89236534638890cdf93454fd6cd536dc290fe66
6
+ metadata.gz: 1e9a9a9912071e338b36f0e4db34a8077c896fa6356d3ffa31a064a5ce7201d31a778895fbf051003640dcd92b837456202487c8b275236457063b451dc5c752
7
+ data.tar.gz: c4923a5c46669684793406b8dd70ce9b0d8f974fd280f846da920e018613e292ac235137254cb17b8c15ea8eebcf5da0c059602dce83a2b95df99f98760a6626
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.22.0
4
+
5
+ * Add `extend_config` option [#506](https://github.com/testdouble/standard/pull/506)
6
+
7
+ ## 1.21.1
8
+
9
+ * Fix standard comment directives [#498](https://github.com/testdouble/standard/pull/498)
10
+
3
11
  ## 1.21.0
4
12
 
5
13
  * Update rubocop-performance from 1.15.1 to [1.15.2](https://github.com/rubocop/rubocop-performance/releases/tag/v1.15.2)
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- standard (1.21.0)
4
+ standard (1.22.0)
5
5
  language_server-protocol (~> 3.17.0.2)
6
6
  rubocop (= 1.42.0)
7
7
  rubocop-performance (= 1.15.2)
@@ -49,7 +49,7 @@ GEM
49
49
  simplecov_json_formatter (~> 0.1)
50
50
  simplecov-html (0.12.3)
51
51
  simplecov_json_formatter (0.1.4)
52
- unicode-display_width (2.4.0)
52
+ unicode-display_width (2.4.2)
53
53
 
54
54
  PLATFORMS
55
55
  ruby
data/README.md CHANGED
@@ -215,9 +215,7 @@ inherit_gem:
215
215
 
216
216
  ## Who uses Ruby Standard Style?
217
217
 
218
- (This section will not [look very
219
- familiar](https://github.com/standard/standard#who-uses-javascript-standard-style)
220
- if you've used StandardJS.)
218
+ Here are a few examples of Ruby Standard-compliant teams & projects:
221
219
 
222
220
  * [Test Double](https://testdouble.com/agency)
223
221
  * [Amazon Web Services](https://aws.amazon.com/)
@@ -244,9 +242,7 @@ if you've used StandardJS.)
244
242
  * [RubyCI](https://ruby.ci)
245
243
  * [thoughtbot](https://thoughtbot.com/)
246
244
 
247
- If your team starts using Standard, [send a pull
248
- request](https://github.com/testdouble/standard/edit/main/README.md) to let us
249
- know!
245
+ Does your team use Standard? [Add your name to the list](https://github.com/testdouble/standard/edit/main/README.md)!
250
246
 
251
247
  ## Is there a readme badge?
252
248
 
@@ -401,6 +397,51 @@ configurations](https://github.com/testdouble/standard/tree/main/config) and
401
397
  consider helping out by submitting a pull request if you find a rule that won't
402
398
  work for older Rubies.
403
399
 
400
+ ## How do I use Standard with RuboCop extensions or custom rules?
401
+
402
+ If you want to use Standard in conjunction with RuboCop extensions or custom
403
+ cops, you can specify them in your own [RuboCop configuration
404
+ YAML](https://docs.rubocop.org/rubocop/configuration.html) files and
405
+ `.standard.yml` using the "extend_config:` setting:
406
+
407
+ ```yml
408
+ # .standard.yml
409
+ extend_config:
410
+ - .betterlint.yml
411
+ ```
412
+
413
+ Which in turn would refer to a RuboCop configuration file:
414
+
415
+ ```yml
416
+ # .betterlint.yml
417
+ require:
418
+ - rubocop/cop/betterment.rb
419
+
420
+ AllCops:
421
+ DisabledByDefault: true
422
+
423
+ Betterment/UnscopedFind:
424
+ Enabled: true
425
+
426
+ unauthenticated_models:
427
+ - SystemConfiguration
428
+ ```
429
+
430
+ When Standard runs, it will merge your configuration files with Standard's base
431
+ ruleset. To ensure that this feature does not result in Standard's rules being
432
+ modified, any configuration of rules includued in `rubocop` or
433
+ `rubocop-performance` will be ignored. Most settings under `AllCops:` can be
434
+ configured, unless they'd conflict with a setting used by Standard (like
435
+ `TargetRubyVersion`) or prevent Standard's own rules from running (like
436
+ `StyleGuideCopsOnly`). If you specify multiple YAML files under `extend_config`,
437
+ note that their resulting RuboCop configurations will be merged in order (i.e.
438
+ last-in-wins).
439
+
440
+ If you find that Standard's `extend_config` feature doesn't meet your needs,
441
+ Evil Martians also maintains [a regularly updated
442
+ guide](https://evilmartians.com/chronicles/rubocoping-with-legacy-bring-your-ruby-code-up-to-standard)
443
+ on how to configure RuboCop to load and execute Standard's ruleset.
444
+
404
445
  ## How do I change the output?
405
446
 
406
447
  Standard's built-in formatter is intentionally minimal, printing only unfixed
@@ -492,13 +533,6 @@ either:
492
533
  gem to your build, which will automatically ensure that the comment is
493
534
  prepended for every applicable file in your project
494
535
 
495
- ## How do I use Standard with RuboCop extensions?
496
-
497
- This is not officially supported by Standard. However, Evil Martians wrote up [a
498
- regularly updated
499
- guide](https://evilmartians.com/chronicles/rubocoping-with-legacy-bring-your-ruby-code-up-to-standard)
500
- on how to do so.
501
-
502
536
  ## How often is Standard updated?
503
537
 
504
538
  We aim to update Standard once a month, in the first week of the month. In between releases, we'll be considering RuboCop updates, RuboCop Performance updates, and community contributions.
@@ -0,0 +1,50 @@
1
+ require_relative "../file_finder"
2
+
3
+ class Standard::CreatesConfigStore
4
+ class MergesUserConfigExtensions
5
+ DISALLOWED_ALLCOPS_KEYS = [
6
+ "Include",
7
+ "Exclude",
8
+ "StyleGuideCopsOnly",
9
+ "TargetRubyVersion"
10
+ ].freeze
11
+
12
+ def call(options_config, standard_config)
13
+ return unless standard_config[:extend_config]&.any?
14
+
15
+ extended_config = load_and_merge_extended_rubocop_configs(standard_config)
16
+ merge_standard_and_user_all_cops!(options_config, extended_config)
17
+ merge_extended_rules_into_standard!(options_config, extended_config)
18
+ end
19
+
20
+ private
21
+
22
+ def load_and_merge_extended_rubocop_configs(standard_config)
23
+ {
24
+ "AllCops" => {}
25
+ }.tap do |config|
26
+ standard_config[:extend_config].each do |path|
27
+ extension = RuboCop::ConfigLoader.load_file(Standard::FileFinder.new.call(path, Dir.pwd)).to_h
28
+ config["AllCops"].merge!(extension["AllCops"]) if extension.key?("AllCops")
29
+ config.merge!(except(extension, ["AllCops"]))
30
+ end
31
+ end
32
+ end
33
+
34
+ def merge_standard_and_user_all_cops!(options_config, extended_config)
35
+ options_config["AllCops"].merge!(
36
+ except(extended_config["AllCops"], DISALLOWED_ALLCOPS_KEYS)
37
+ )
38
+ end
39
+
40
+ def merge_extended_rules_into_standard!(options_config, extended_config)
41
+ except(extended_config, options_config.keys).each do |key, value|
42
+ options_config[key] = value
43
+ end
44
+ end
45
+
46
+ def except(hash, keys)
47
+ hash.reject { |key, _| keys.include?(key) }.to_h
48
+ end
49
+ end
50
+ end
@@ -3,6 +3,7 @@ require "rubocop"
3
3
  require_relative "creates_config_store/assigns_rubocop_yaml"
4
4
  require_relative "creates_config_store/sets_target_ruby_version"
5
5
  require_relative "creates_config_store/configures_ignored_paths"
6
+ require_relative "creates_config_store/merges_user_config_extensions"
6
7
 
7
8
  module Standard
8
9
  class CreatesConfigStore
@@ -10,6 +11,7 @@ module Standard
10
11
  @assigns_rubocop_yaml = AssignsRubocopYaml.new
11
12
  @sets_target_ruby_version = SetsTargetRubyVersion.new
12
13
  @configures_ignored_paths = ConfiguresIgnoredPaths.new
14
+ @merges_user_config_extensions = MergesUserConfigExtensions.new
13
15
  end
14
16
 
15
17
  def call(standard_config)
@@ -17,6 +19,7 @@ module Standard
17
19
  options_config = @assigns_rubocop_yaml.call(config_store, standard_config)
18
20
  @sets_target_ruby_version.call(options_config, standard_config)
19
21
  @configures_ignored_paths.call(options_config, standard_config)
22
+ @merges_user_config_extensions.call(options_config, standard_config)
20
23
  end
21
24
  end
22
25
  end
@@ -1,9 +1,23 @@
1
+ require_relative "runners/rubocop"
2
+ require_relative "runners/version"
3
+ require_relative "runners/verbose_version"
4
+ require_relative "runners/lsp"
5
+ require_relative "runners/genignore"
6
+ require_relative "runners/help"
7
+
1
8
  module Standard
2
9
  class LoadsRunner
3
- # Warning: clever metaprogramming. 99% of the time this is Runners::Rubocop
10
+ RUNNERS = {
11
+ rubocop: ::Standard::Runners::Rubocop,
12
+ version: ::Standard::Runners::Version,
13
+ verbose_version: ::Standard::Runners::VerboseVersion,
14
+ lsp: ::Standard::Runners::Lsp,
15
+ genignore: ::Standard::Runners::Genignore,
16
+ help: ::Standard::Runners::Help
17
+ }.freeze
18
+
4
19
  def call(command)
5
- require_relative "runners/#{command}"
6
- ::Standard::Runners.const_get(command.to_s.capitalize).new
20
+ RUNNERS[command].new
7
21
  end
8
22
  end
9
23
  end
@@ -32,7 +32,8 @@ module Standard
32
32
  default_ignores: standard_yaml.key?("default_ignores") ? !!standard_yaml["default_ignores"] : true,
33
33
  config_root: yaml_path ? Pathname.new(yaml_path).dirname.to_s : nil,
34
34
  todo_file: todo_path,
35
- todo_ignore_files: (todo_yaml["ignore"] || []).map { |f| (Hash === f) ? f.keys.first : f }
35
+ todo_ignore_files: Array(todo_yaml["ignore"]).map { |f| (Hash === f) ? f.keys.first : f },
36
+ extend_config: Array(standard_yaml["extend_config"])
36
37
  }
37
38
  end
38
39
 
@@ -20,7 +20,7 @@ module Standard
20
20
 
21
21
  def separate_argv(argv)
22
22
  argv.partition do |flag|
23
- ["--generate-todo", "--fix", "--no-fix", "--version", "-v", "--help", "-h", "--lsp"].include?(flag)
23
+ ["--generate-todo", "--fix", "--no-fix", "--version", "-v", "--verbose-version", "-V", "--help", "-h", "--lsp"].include?(flag)
24
24
  end
25
25
  end
26
26
 
@@ -39,6 +39,8 @@ module Standard
39
39
  :help
40
40
  elsif (argv & ["--version", "-v"]).any?
41
41
  :version
42
+ elsif (argv & ["--verbose-version", "-V"]).any?
43
+ :verbose_version
42
44
  elsif (argv & ["--generate-todo"]).any?
43
45
  :genignore
44
46
  elsif (argv & ["--lsp"]).any?
@@ -13,4 +13,13 @@ module RuboCop
13
13
  .gsub(" ", '\s*')
14
14
  )
15
15
  end
16
+
17
+ class CommentConfig
18
+ alias_method :old_initialize, :initialize
19
+
20
+ def initialize(processed_source)
21
+ old_initialize(processed_source)
22
+ @no_directives &&= !processed_source.raw_source.include?("standard")
23
+ end
24
+ end
16
25
  end
@@ -15,6 +15,7 @@ module Standard
15
15
  --generate-todo Create a .standard_todo.yml that lists all the files that contain errors
16
16
  --lsp Start a LSP server listening on STDIN
17
17
  -v, --version Print the version of Standard
18
+ -V, --verbose-version Print the version of Standard and its dependencies.
18
19
  -h, --help Print this message
19
20
  FILE Files to lint [default: ./]
20
21
 
@@ -0,0 +1,14 @@
1
+ require_relative "rubocop"
2
+
3
+ module Standard
4
+ module Runners
5
+ class VerboseVersion
6
+ def call(config)
7
+ puts <<-MSG.gsub(/^ {10}/, "")
8
+ Standard version: #{Standard::VERSION}
9
+ RuboCop version: #{RuboCop::Version.version(debug: true)}
10
+ MSG
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1,3 +1,3 @@
1
1
  module Standard
2
- VERSION = Gem::Version.new("1.21.0")
2
+ VERSION = Gem::Version.new("1.22.0")
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: standard
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.21.0
4
+ version: 1.22.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Searls
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-01-03 00:00:00.000000000 Z
11
+ date: 2023-01-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubocop
@@ -52,7 +52,7 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: 3.17.0.2
55
- description:
55
+ description:
56
56
  email:
57
57
  - searls@gmail.com
58
58
  executables:
@@ -95,6 +95,7 @@ files:
95
95
  - lib/standard/creates_config_store.rb
96
96
  - lib/standard/creates_config_store/assigns_rubocop_yaml.rb
97
97
  - lib/standard/creates_config_store/configures_ignored_paths.rb
98
+ - lib/standard/creates_config_store/merges_user_config_extensions.rb
98
99
  - lib/standard/creates_config_store/sets_target_ruby_version.rb
99
100
  - lib/standard/detects_fixability.rb
100
101
  - lib/standard/file_finder.rb
@@ -112,13 +113,14 @@ files:
112
113
  - lib/standard/runners/help.rb
113
114
  - lib/standard/runners/lsp.rb
114
115
  - lib/standard/runners/rubocop.rb
116
+ - lib/standard/runners/verbose_version.rb
115
117
  - lib/standard/runners/version.rb
116
118
  - lib/standard/version.rb
117
119
  - standard.gemspec
118
120
  homepage: https://github.com/testdouble/standard
119
121
  licenses: []
120
122
  metadata: {}
121
- post_install_message:
123
+ post_install_message:
122
124
  rdoc_options: []
123
125
  require_paths:
124
126
  - lib
@@ -133,8 +135,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
133
135
  - !ruby/object:Gem::Version
134
136
  version: '0'
135
137
  requirements: []
136
- rubygems_version: 3.1.6
137
- signing_key:
138
+ rubygems_version: 3.3.26
139
+ signing_key:
138
140
  specification_version: 4
139
141
  summary: Ruby Style Guide, with linter & automatic code fixer
140
142
  test_files: []