Skip to content

Commit

Permalink
Merge pull request #490 from koic/pluginfy_with_lint_roller
Browse files Browse the repository at this point in the history
Pluginfy RuboCop Performance
  • Loading branch information
koic authored Feb 15, 2025
2 parents ab7ef16 + b83339d commit f6e7da0
Show file tree
Hide file tree
Showing 12 changed files with 57 additions and 45 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ jobs:
sed -e "/gem 'rubocop', github: 'rubocop\/rubocop'/d" \
-e "/gem 'rubocop-rspec',/d" -i Gemfile
cat << EOF > Gemfile.local
gem 'rubocop', '1.48.1' # Specify the oldest supported RuboCop version
gem 'rubocop', '1.72.1' # Specify the oldest supported RuboCop version
EOF
- name: set up Ruby
uses: ruby/setup-ruby@v1
Expand Down
7 changes: 5 additions & 2 deletions .rubocop.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
# This is the configuration used to check the rubocop source code.

inherit_from: .rubocop_todo.yml
require:
- rubocop/cop/internal_affairs

plugins:
- rubocop-internal_affairs
- rubocop-performance

require:
- rubocop-rspec

AllCops:
Expand Down
11 changes: 7 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,24 +30,27 @@ ways to do this:
Put this into your `.rubocop.yml`.

```yaml
require: rubocop-performance
plugins: rubocop-performance
```
Alternatively, use the following array notation when specifying multiple extensions.
```yaml
require:
plugins:
- rubocop-other-extension
- rubocop-performance
```
Now you can run `rubocop` and it will automatically load the RuboCop Performance
cops together with the standard cops.

> [!NOTE]
> The plugin system is supported in RuboCop 1.72+. In earlier versions, use `require` instead of `plugins`.

### Command line

```sh
$ rubocop --require rubocop-performance
$ rubocop --plugin rubocop-performance
```

### Rake task
Expand All @@ -56,7 +59,7 @@ $ rubocop --require rubocop-performance
require 'rubocop/rake_task'
RuboCop::RakeTask.new do |task|
task.requires << 'rubocop-performance'
task.plugins << 'rubocop-performance'
end
```

Expand Down
1 change: 1 addition & 0 deletions changelog/new_pluginfy_with_lint_roller.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* [#490](https://github.com/rubocop/rubocop-performance/pull/490): Pluginfy RuboCop Performance. ([@koic][])
8 changes: 5 additions & 3 deletions docs/modules/ROOT/pages/usage.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -9,24 +9,26 @@ Put this into your `.rubocop.yml`.

[source,yaml]
----
require: rubocop-performance
plugins: rubocop-performance
----

Now you can run `rubocop` and it will automatically load the RuboCop Performance
cops together with the standard cops.

NOTE: The plugin system is supported in RuboCop 1.72+. In earlier versions, use `require` instead of `plugins`.

== Command line

[source,sh]
----
$ rubocop --require rubocop-performance
$ rubocop --plugin rubocop-performance
----

== Rake task

[source,ruby]
----
RuboCop::RakeTask.new do |task|
task.requires << 'rubocop-performance'
task.plugins << 'rubocop-performance'
end
----
5 changes: 1 addition & 4 deletions lib/rubocop-performance.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,7 @@

require_relative 'rubocop/performance'
require_relative 'rubocop/performance/version'
require_relative 'rubocop/performance/inject'

RuboCop::Performance::Inject.defaults!

require_relative 'rubocop/performance/plugin'
require_relative 'rubocop/cop/performance_cops'

RuboCop::Cop::Lint::UnusedMethodArgument.singleton_class.prepend(
Expand Down
8 changes: 1 addition & 7 deletions lib/rubocop/performance.rb
Original file line number Diff line number Diff line change
@@ -1,13 +1,7 @@
# frozen_string_literal: true

module RuboCop
# RuboCop Performance project namespace
# RuboCop Performance project namespace.
module Performance
PROJECT_ROOT = Pathname.new(__dir__).parent.parent.expand_path.freeze
CONFIG_DEFAULT = PROJECT_ROOT.join('config', 'default.yml').freeze

private_constant(:CONFIG_DEFAULT, :PROJECT_ROOT)

::RuboCop::ConfigObsoletion.files << PROJECT_ROOT.join('config', 'obsoletion.yml')
end
end
17 changes: 0 additions & 17 deletions lib/rubocop/performance/inject.rb

This file was deleted.

31 changes: 31 additions & 0 deletions lib/rubocop/performance/plugin.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# frozen_string_literal: true

require 'lint_roller'

module RuboCop
module Performance
# A plugin that integrates RuboCop Performance with RuboCop's plugin system.
class Plugin < LintRoller::Plugin
def about
LintRoller::About.new(
name: 'rubocop-performance',
version: Version::STRING,
homepage: 'https://github.com/rubocop/rubocop-performance',
description: 'A collection of RuboCop cops to check for performance optimizations in Ruby code.'
)
end

def supported?(context)
context.engine == :rubocop
end

def rules(_context)
project_root = Pathname.new(__dir__).join('../../..')

ConfigObsoletion.files << project_root.join('config', 'obsoletion.yml')

LintRoller::Rules.new(type: :path, config_format: :rubocop, value: project_root.join('config', 'default.yml'))
end
end
end
end
6 changes: 4 additions & 2 deletions rubocop-performance.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,11 @@ Gem::Specification.new do |s|
'source_code_uri' => 'https://github.com/rubocop/rubocop-performance/',
'documentation_uri' => "https://docs.rubocop.org/rubocop-performance/#{RuboCop::Performance::Version.document_version}/",
'bug_tracker_uri' => 'https://github.com/rubocop/rubocop-performance/issues',
'rubygems_mfa_required' => 'true'
'rubygems_mfa_required' => 'true',
'default_lint_roller_plugin' => 'RuboCop::Performance::Plugin'
}

s.add_dependency('rubocop', '>= 1.48.1', '< 2.0')
s.add_dependency('lint_roller', '~> 1.1')
s.add_dependency('rubocop', '>= 1.72.1', '< 2.0')
s.add_dependency('rubocop-ast', '>= 1.38.0', '< 2.0')
end
4 changes: 0 additions & 4 deletions spec/spec_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,6 @@
end

RSpec.configure do |config|
# TODO: It can be removed when the oldest supported RuboCop version is greater than 1.71.0.
# https://github.com/rubocop/rubocop/pull/13748
config.include RuboCop::RSpec::ExpectOffense

config.shared_context_metadata_behavior = :apply_to_host_groups
config.filter_run_when_matching :focus
config.filter_run_excluding broken_on: :prism if ENV['PARSER_ENGINE'] == 'parser_prism'
Expand Down
2 changes: 1 addition & 1 deletion tasks/cops_documentation.rake
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ task update_cops_documentation: :yard_for_generate_documentation do

# NOTE: Update `<<next>>` version for docs/modules/ROOT/pages/cops_performance.adoc
# when running release tasks.
RuboCop::Performance::Inject.defaults!
RuboCop::ConfigLoader.inject_defaults!("#{__dir__}/../config/default.yml")

CopsDocumentationGenerator.new(departments: deps).call
end
Expand Down

0 comments on commit f6e7da0

Please sign in to comment.