Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Separate Ruby (rubocop-github) from Rails (rubocop-github-rails) cops and rules to disambiguate rule inheritance from custom cops #121

Merged
merged 1 commit into from
Oct 13, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .rubocop.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
inherit_from: ./config/default.yml
inherit_from:
- ./config/default.yml

Naming/FileName:
Enabled: true
Exclude:
- "rubocop-github.gemspec"
- "lib/rubocop-github.rb"
- "lib/rubocop-github-rails.rb"
3 changes: 3 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ GEM
crass (~> 1.0.2)
nokogiri (>= 1.5.9)
minitest (5.16.1)
nokogiri (1.13.6-arm64-darwin)
racc (~> 1.4)
nokogiri (1.13.6-x86_64-darwin)
racc (~> 1.4)
parallel (1.22.1)
Expand Down Expand Up @@ -71,6 +73,7 @@ GEM
unicode-display_width (2.2.0)

PLATFORMS
arm64-darwin-21
x86_64-darwin-19
x86_64-darwin-20

Expand Down
42 changes: 26 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,32 @@ This repository provides recommended RuboCop configuration and additional Cops f

## Usage

**Gemfile**

``` ruby
gem "rubocop-github"
gem "rubocop-performance", require: false
gem "rubocop-rails", require: false
```

**.rubocop.yml**

``` yaml
inherit_gem:
rubocop-github:
- config/default.yml
- config/rails.yml
```
Add `rubocop-github` to your Gemfile, along with its dependencies:

```ruby
gem "rubocop-github", require: false
gem "rubocop-performance", require: false
gem "rubocop-rails", require: false
```

Inherit all of the stylistic rules and cops through an inheritance declaration in your `.rubocop.yml`:

```yaml
# .rubocop.yml
inherit_from:
rubocop-github:
- config/default.yml # generic Ruby rules and cops
- config/rails.yml # Rails-specific rules and cops
```

Alternatively, only require the additional custom cops in your `.rubocop.yml` without inheriting/enabling the other stylistic rules:

```yaml
# .rubocop.yml
require:
- rubocop-github # generic Ruby cops only
- rubocop-github-rails # Rails-specific cops only
```

💭 Looking for `config/accessibility.yml` and the `GitHub/Accessibility` configs? They have been moved to [a new gem](https://github.com/github/rubocop-rails-accessibility).

Expand Down
2 changes: 1 addition & 1 deletion config/default.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
require:
- rubocop/cop/github
- rubocop-github
- rubocop-performance

AllCops:
Expand Down
3 changes: 3 additions & 0 deletions config/default_cops.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
GitHub/InsecureHashAlgorithm:
Description: 'Encourage usage of secure hash algorithms'
Enabled: pending
34 changes: 1 addition & 33 deletions config/rails.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
require:
- rubocop-github-rails
- rubocop-rails

Rails/OutputSafety:
Expand All @@ -22,63 +23,30 @@ GitHub/RailsApplicationRecord:

GitHub/RailsControllerRenderActionSymbol:
Enabled: true
Include:
- 'app/controllers/**/*.rb'

GitHub/RailsControllerRenderLiteral:
Enabled: true
StyleGuide: https://github.com/github/rubocop-github/blob/master/guides/rails-render-literal.md
Include:
- 'app/controllers/**/*.rb'

GitHub/RailsControllerRenderPathsExist:
Enabled: true
ViewPath:
- 'app/views'
Include:
- 'app/controllers/**/*.rb'

GitHub/RailsControllerRenderShorthand:
Enabled: true
StyleGuide: https://github.com/github/rubocop-github/blob/master/guides/rails-controller-render-shorthand.md
Include:
- 'app/controllers/**/*.rb'

GitHub/RailsRenderInline:
Enabled: true
StyleGuide: https://github.com/github/rubocop-github/blob/master/guides/rails-controller-render-inline.md
Include:
- 'app/controllers/**/*.rb'
- 'app/helpers/**/*.rb'
- 'app/view_models/**/*.rb'
- 'app/views/**/*.erb'

GitHub/RailsRenderObjectCollection:
Enabled: false

GitHub/RailsViewRenderLiteral:
Enabled: true
StyleGuide: https://github.com/github/rubocop-github/blob/master/guides/rails-render-literal.md
Include:
- 'app/helpers/**/*.rb'
- 'app/view_models/**/*.rb'
- 'app/views/**/*.erb'

GitHub/RailsViewRenderPathsExist:
Enabled: true
ViewPath:
- 'app/views'
Include:
- 'app/helpers/**/*.rb'
- 'app/view_models/**/*.rb'
- 'app/views/**/*.erb'

GitHub/RailsViewRenderShorthand:
Enabled: true
Include:
- 'app/helpers/**/*.rb'
- 'app/view_models/**/*.rb'
- 'app/views/**/*.erb'

# Exclude Rails ERB files from incompatible cops

Expand Down
62 changes: 62 additions & 0 deletions config/rails_cops.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
GitHub/RailsApplicationRecord:
Enabled: pending

GitHub/RailsControllerRenderActionSymbol:
Enabled: pending
Include:
- 'app/controllers/**/*.rb'

GitHub/RailsControllerRenderLiteral:
Enabled: pending
StyleGuide: https://github.com/github/rubocop-github/blob/master/guides/rails-render-literal.md
Include:
- 'app/controllers/**/*.rb'

GitHub/RailsControllerRenderPathsExist:
Enabled: pending
ViewPath:
- 'app/views'
Include:
- 'app/controllers/**/*.rb'

GitHub/RailsControllerRenderShorthand:
Enabled: pending
StyleGuide: https://github.com/github/rubocop-github/blob/master/guides/rails-controller-render-shorthand.md
Include:
- 'app/controllers/**/*.rb'

GitHub/RailsRenderInline:
Enabled: pending
StyleGuide: https://github.com/github/rubocop-github/blob/master/guides/rails-controller-render-inline.md
Include:
- 'app/controllers/**/*.rb'
- 'app/helpers/**/*.rb'
- 'app/view_models/**/*.rb'
- 'app/views/**/*.erb'

GitHub/RailsRenderObjectCollection:
Enabled: pending

GitHub/RailsViewRenderLiteral:
Enabled: pending
StyleGuide: https://github.com/github/rubocop-github/blob/master/guides/rails-render-literal.md
Include:
- 'app/helpers/**/*.rb'
- 'app/view_models/**/*.rb'
- 'app/views/**/*.erb'

GitHub/RailsViewRenderPathsExist:
Enabled: pending
ViewPath:
- 'app/views'
Include:
- 'app/helpers/**/*.rb'
- 'app/view_models/**/*.rb'
- 'app/views/**/*.erb'

GitHub/RailsViewRenderShorthand:
Enabled: pending
Include:
- 'app/helpers/**/*.rb'
- 'app/view_models/**/*.rb'
- 'app/views/**/*.erb'
18 changes: 18 additions & 0 deletions lib/rubocop-github-rails.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# frozen_string_literal: true

require "rubocop"
require "rubocop/github"
require "rubocop/github/inject"

RuboCop::GitHub::Inject.rails_defaults!

require "rubocop/cop/github/rails_application_record"
require "rubocop/cop/github/rails_controller_render_action_symbol"
require "rubocop/cop/github/rails_controller_render_literal"
require "rubocop/cop/github/rails_controller_render_paths_exist"
require "rubocop/cop/github/rails_controller_render_shorthand"
require "rubocop/cop/github/rails_render_inline"
require "rubocop/cop/github/rails_render_object_collection"
require "rubocop/cop/github/rails_view_render_literal"
require "rubocop/cop/github/rails_view_render_paths_exist"
require "rubocop/cop/github/rails_view_render_shorthand"
9 changes: 9 additions & 0 deletions lib/rubocop-github.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# frozen_string_literal: true

require "rubocop"
require "rubocop/github"
require "rubocop/github/inject"

RuboCop::GitHub::Inject.default_defaults!

require "rubocop/cop/github/insecure_hash_algorithm"
13 changes: 2 additions & 11 deletions lib/rubocop/cop/github.rb
Original file line number Diff line number Diff line change
@@ -1,13 +1,4 @@
# frozen_string_literal: true

require "rubocop/cop/github/insecure_hash_algorithm"
require "rubocop/cop/github/rails_application_record"
require "rubocop/cop/github/rails_controller_render_action_symbol"
require "rubocop/cop/github/rails_controller_render_literal"
require "rubocop/cop/github/rails_controller_render_paths_exist"
require "rubocop/cop/github/rails_controller_render_shorthand"
require "rubocop/cop/github/rails_render_inline"
require "rubocop/cop/github/rails_render_object_collection"
require "rubocop/cop/github/rails_view_render_literal"
require "rubocop/cop/github/rails_view_render_paths_exist"
require "rubocop/cop/github/rails_view_render_shorthand"
require "rubocop-github"
require "rubocop-rails"
9 changes: 9 additions & 0 deletions lib/rubocop/github.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# frozen_string_literal: true

module RuboCop
module GitHub
PROJECT_ROOT = Pathname.new(__dir__).parent.parent.expand_path.freeze
CONFIG_DEFAULT = PROJECT_ROOT.join("config", "default_cops.yml").freeze
CONFIG_RAILS = PROJECT_ROOT.join("config", "rails_cops.yml").freeze
end
end
27 changes: 27 additions & 0 deletions lib/rubocop/github/inject.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# frozen_string_literal: true

module RuboCop
module GitHub
# Because RuboCop doesn't yet support plugins, we have to monkey patch in a
# bit of our configuration. Borrowed from:
# https://github.com/rubocop/rubocop-rails/blob/f36121946359615a26c9a941763abd1470693e8d/lib/rubocop/rails/inject.rb
module Inject
def self.default_defaults!
_load_config(CONFIG_DEFAULT)
end

def self.rails_defaults!
_load_config(CONFIG_RAILS)
end

def self._load_config(path)
path = path.to_s
hash = ConfigLoader.send(:load_yaml_configuration, path)
config = Config.new(hash, path).tap(&:make_excludes_absolute)
puts "configuration from #{path}" if ConfigLoader.debug?
config = ConfigLoader.merge_with_default(config, path, unset_nil: false)
ConfigLoader.instance_variable_set(:@default_configuration, config)
end
end
end
end