Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/shanecav84/rubocop-ordered_methods
Check that methods are defined alphabetically per access modifier block.
https://github.com/shanecav84/rubocop-ordered_methods
linter rubocop ruby
Last synced: 1 day ago
JSON representation
Check that methods are defined alphabetically per access modifier block.
- Host: GitHub
- URL: https://github.com/shanecav84/rubocop-ordered_methods
- Owner: shanecav84
- License: mit
- Created: 2019-02-17T17:21:41.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2024-10-01T15:18:35.000Z (3 months ago)
- Last Synced: 2024-12-25T16:06:40.229Z (8 days ago)
- Topics: linter, rubocop, ruby
- Language: Ruby
- Homepage:
- Size: 120 KB
- Stars: 14
- Watchers: 5
- Forks: 6
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.txt
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
[![Gem Version](https://badge.fury.io/rb/rubocop-ordered_methods.svg)](https://badge.fury.io/rb/rubocop-ordered_methods)
[![Build Status](https://github.com/shanecav84/rubocop-ordered_methods/actions/workflows/main.yml/badge.svg)](https://github.com/shanecav84/rubocop-ordered_methods/actions)# RuboCop OrderedMethods
Check that methods are defined alphabetically per access modifier block (class,
public, private, protected). Includes [autocorrection](#corrector).```ruby
# bad
def self.b_class; end
def self.a_class; enddef b_public; end
def a_public; endprivate
def b_private; end
def a_private; end# good
def self.a_class; end
def self.b_class; enddef a_public; end
def b_public; endprivate
def a_private; end
def b_private; end
```## Installation
Add this line to your application's Gemfile:
```ruby
gem 'rubocop-ordered_methods'
```And then execute:
$ bundle
Or install it yourself as:
$ gem install rubocop-ordered_methods
## Usage
You need to tell RuboCop to load the OrderedMethods extension. There are two
ways to do this:### RuboCop configuration file
Put this into your `.rubocop.yml`.
```
require: rubocop-ordered_methods
```Now you can run `rubocop` and it will automatically load the RuboCop OrderedMethods
cops together with the standard cops.### Command line
```bash
rubocop --require rubocop-ordered_methods
```### Configurable attributes
Name | Default value | Configurable values
--- | --- | ---
EnforcedStyle | `'alphabetical'` | `'alphabetical'`
IgnoredMethods | `['initialize']` | Array
MethodQualifiers | `[]` | Array
Signature | `nil` | `'sorbet'`, `nil`#### Example
```
# .rubocop.yml
Layout/OrderedMethods:
EnforcedStyle: alphabetical
IgnoredMethods:
- initialize
MethodQualifiers:
- memoize
Signature: sorbet
```### Corrector
The corrector will attempt to order methods based on the `EnforcedStyle`. It attempts to
include surrounding comments and the qualifiers (e.g., aliases) listed in
`::RuboCop::Cop::OrderedMethodsCorrector::QUALIFIERS`. The following (monstrous)
source is able to be correctly ordered:```ruby
# Long
# Preceding
# Comment
# class_b
def self.class_b; end
private_class_method :class_bdef self.class_a; end
# Long
# Succeeding
# Comment
# class_a
public_class_method :class_a# Preceding comment for instance_b
def instance_b; end
# Long
# Succeeding
# Comment
# instance_b
alias_method :orig_instance_b, :instance_b
module_function :instance_b
private :instance_b
protected :instance_b
public :instance_b# Long
# Preceding
# Comment
# instance_a
def instance_a; end
# Succeeding comment for instance_a
alias :new_instance_a :instance_a
alias_method :orig_instance_a, :instance_a
module_function :instance_a
private :instance_a
protected :instance_a
public :instance_a
```#### Method qualifiers
Some gems (like `memery`, `memoist`, etc.) provide a DSL that modifies the method (e.g. for memoization).
Those DSL methods can be added to the `MethodQualifiers` configuration, and they will be respected.E.g. the following source can be correctly ordered:
```ruby
def b; end;
memoize def a;end
```#### Method signatures
Support for (Sorbet) method signatures was added to the corrector by
[#7](https://github.com/shanecav84/rubocop-ordered_methods/pull/7).
It is off by default due to performance concerns (not yet benchmarked). Enable
with `Signature: sorbet`.#### Caveats
* The corrector will warn and refuse to order a method if it were to be
defined before its alias
* If there's ambiguity about which method a comment or qualifier belongs to,
the corrector might fail to order correctly. For example, in the following,
the corrector would incorrectly order the comment as a comment of `a`:```ruby
def b; end
# Comment b
def a; end
```## Project status
Development is ongoing. There might be extended periods between releases.
The maintenance goal is to add features as needed and to maintain compatibility
with Ruby and rubocop updates.## Development
### Setup
```bash
bundle install
bundle exec rake
```## Contributing
Bug reports and pull requests are welcome on GitHub at
https://github.com/shanecav84/rubocop-ordered_methods. This project is intended
to be a safe, welcoming space for collaboration, and contributors are expected
to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of
conduct.## License
The gem is available as open source under the terms of the
[MIT License](https://opensource.org/licenses/MIT).## Code of Conduct
Everyone interacting in the RuboCop OrderedMethods project’s codebases, issue
trackers, chat rooms and mailing lists is expected to follow the
[code of conduct](https://github.com/shanecav84/rubocop-ordered_methods/blob/master/CODE_OF_CONDUCT.md).