Skip to content

Commit c0d3155

Browse files
committed
Pluginfy RuboCop Minitest
This PR adds support for RuboCop's Plugin feature: rubocop/rubocop#13792 It replaces the ad-hoc `Inject` with RuboCop plugins introduced in RuboCop 1.72.
1 parent 0bff3d5 commit c0d3155

File tree

12 files changed

+57
-40
lines changed

12 files changed

+57
-40
lines changed

Diff for: .github/workflows/test.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ jobs:
9191
run: |
9292
sed -e "/gem 'rubocop', github: 'rubocop\/rubocop'/d" -i Gemfile
9393
cat << EOF > Gemfile.local
94-
gem 'rubocop', '1.61.0' # Specify the oldest supported RuboCop version
94+
gem 'rubocop', '1.72.0' # Specify the oldest supported RuboCop version
9595
EOF
9696
- name: set up Ruby
9797
uses: ruby/setup-ruby@v1

Diff for: .rubocop.yml

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1+
# This is the configuration used to check the rubocop source code.
2+
13
inherit_from: .rubocop_todo.yml
24

3-
# This is the configuration used to check the rubocop source code.
5+
plugins:
6+
- rubocop-internal_affairs
7+
- rubocop-minitest
48

59
require:
6-
- rubocop/cop/internal_affairs
710
- rubocop-performance
8-
- rubocop-minitest
911

1012
AllCops:
1113
NewCops: enable

Diff for: README.md

+7-4
Original file line numberDiff line numberDiff line change
@@ -30,24 +30,27 @@ ways to do this:
3030
Put this into your `.rubocop.yml`.
3131

3232
```yaml
33-
require: rubocop-minitest
33+
plugins: rubocop-minitest
3434
```
3535
3636
Alternatively, use the following array notation when specifying multiple extensions.
3737
3838
```yaml
39-
require:
39+
plugins:
4040
- rubocop-other-extension
4141
- rubocop-minitest
4242
```
4343
4444
Now you can run `rubocop` and it will automatically load the RuboCop Minitest
4545
cops together with the standard cops.
4646

47+
> [!NOTE]
48+
> The plugin system is supported in RuboCop 1.72+. In earlier versions, use `require` instead of `plugins`.
49+
4750
### Command line
4851

4952
```sh
50-
$ rubocop --require rubocop-minitest
53+
$ rubocop --plugin rubocop-minitest
5154
```
5255

5356
### Rake task
@@ -56,7 +59,7 @@ $ rubocop --require rubocop-minitest
5659
require 'rubocop/rake_task'
5760
5861
RuboCop::RakeTask.new do |task|
59-
task.requires << 'rubocop-minitest'
62+
task.plugins << 'rubocop-minitest'
6063
end
6164
```
6265

Diff for: changelog/new_pluginfy_with_lint_roller.md

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
* [#329](https://github.com/rubocop/rubocop-minitest/pull/329): Pluginfy RuboCop Performance. ([@koic][])

Diff for: docs/modules/ROOT/pages/usage.adoc

+5-3
Original file line numberDiff line numberDiff line change
@@ -9,24 +9,26 @@ Put this into your `.rubocop.yml`.
99

1010
[source,yaml]
1111
----
12-
require: rubocop-minitest
12+
plugins: rubocop-minitest
1313
----
1414

1515
Now you can run `rubocop` and it will automatically load the RuboCop Minitest
1616
cops together with the standard cops.
1717

18+
NOTE: The plugin system is supported in RuboCop 1.72+. In earlier versions, use `require` instead of `plugins`.
19+
1820
== Command line
1921

2022
[source,sh]
2123
----
22-
$ rubocop --require rubocop-minitest
24+
$ rubocop --plugin rubocop-minitest
2325
----
2426

2527
== Rake task
2628

2729
[source,ruby]
2830
----
2931
RuboCop::RakeTask.new do |task|
30-
task.requires << 'rubocop-minitest'
32+
task.plugins << 'rubocop-minitest'
3133
end
3234
----

Diff for: lib/rubocop-minitest.rb

+1-4
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,5 @@
44

55
require_relative 'rubocop/minitest'
66
require_relative 'rubocop/minitest/version'
7-
require_relative 'rubocop/minitest/inject'
8-
9-
RuboCop::Minitest::Inject.defaults!
10-
7+
require_relative 'rubocop/minitest/plugin'
118
require_relative 'rubocop/cop/minitest_cops'

Diff for: lib/rubocop/minitest.rb

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
11
# frozen_string_literal: true
22

33
module RuboCop
4-
# RuboCop minitest project namespace
4+
# RuboCop minitest project namespace.
55
module Minitest
6-
PROJECT_ROOT = Pathname.new(__dir__).parent.parent.expand_path.freeze
7-
CONFIG_DEFAULT = PROJECT_ROOT.join('config', 'default.yml').freeze
8-
9-
private_constant(:CONFIG_DEFAULT, :PROJECT_ROOT)
106
end
117
end

Diff for: lib/rubocop/minitest/inject.rb

-17
This file was deleted.

Diff for: lib/rubocop/minitest/plugin.rb

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# frozen_string_literal: true
2+
3+
require 'lint_roller'
4+
5+
module RuboCop
6+
module Minitest
7+
# A plugin that integrates RuboCop Minitest with RuboCop's plugin system.
8+
class Plugin < LintRoller::Plugin
9+
def about
10+
LintRoller::About.new(
11+
name: 'rubocop-minitest',
12+
version: Version::STRING,
13+
homepage: 'https://github.com/rubocop/rubocop-minitest',
14+
description: 'Automatic Minitest code style checking tool.'
15+
)
16+
end
17+
18+
def supported?(context)
19+
context.engine == :rubocop
20+
end
21+
22+
def rules(_context)
23+
LintRoller::Rules.new(
24+
type: :path,
25+
config_format: :rubocop,
26+
value: Pathname.new(__dir__).join('../../../config/default.yml')
27+
)
28+
end
29+
end
30+
end
31+
end

Diff for: rubocop-minitest.gemspec

+3-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ Gem::Specification.new do |spec|
2323
'source_code_uri' => 'https://github.com/rubocop/rubocop-minitest',
2424
'documentation_uri' => "https://docs.rubocop.org/rubocop-minitest/#{RuboCop::Minitest::Version.document_version}",
2525
'bug_tracker_uri' => 'https://github.com/rubocop/rubocop-minitest/issues',
26-
'rubygems_mfa_required' => 'true'
26+
'rubygems_mfa_required' => 'true',
27+
'default_lint_roller_plugin' => 'RuboCop::Minitest::Plugin'
2728
}
2829

2930
spec.files = Dir['LICENSE.txt', 'README.md', 'config/**/*', 'lib/**/*']
@@ -32,6 +33,7 @@ Gem::Specification.new do |spec|
3233
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
3334
spec.require_paths = ['lib']
3435

36+
spec.add_dependency 'lint_roller', '~> 1.1'
3537
spec.add_dependency 'rubocop', '>= 1.61', '< 2.0'
3638
spec.add_dependency 'rubocop-ast', '>= 1.38.0', '< 2.0'
3739
end

Diff for: tasks/cops_documentation.rake

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ task update_cops_documentation: :yard_for_generate_documentation do
1515

1616
# NOTE: Update `<<next>>` version for docs/modules/ROOT/pages/cops_minitest.adoc
1717
# when running release tasks.
18-
RuboCop::Minitest::Inject.defaults!
18+
RuboCop::ConfigLoader.inject_defaults!("#{__dir__}/../config/default.yml")
1919

2020
CopsDocumentationGenerator.new(departments: deps).call
2121
end

Diff for: test/rubocop/cop/minitest/global_expectations_test.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -506,7 +506,7 @@ def style
506506
private
507507

508508
def configure_enforced_style(style)
509-
all_config = YAML.safe_load(RuboCop::Minitest.const_get(:CONFIG_DEFAULT).read).freeze
509+
all_config = YAML.safe_load(File.read("#{__dir__}/../../../../config/default.yml")).freeze
510510
cop_config = all_config['Minitest/GlobalExpectations']
511511
cop_config = cop_config.merge('EnforcedStyle' => style)
512512
all_config = all_config.merge('Minitest/GlobalExpectations' => cop_config)

0 commit comments

Comments
 (0)