lxxxvi/ruboclean

View on GitHub
README.md

Summary

Maintainability
Test Coverage
![Continuous Integration](https://github.com/lxxxvi/ruboclean/workflows/Continuous%20Integration/badge.svg)
[![Maintainability](https://api.codeclimate.com/v1/badges/a940762e1c0b27caa905/maintainability)](https://codeclimate.com/github/lxxxvi/ruboclean/maintainability)
[![Test Coverage](https://api.codeclimate.com/v1/badges/a940762e1c0b27caa905/test_coverage)](https://codeclimate.com/github/lxxxvi/ruboclean/test_coverage)

# ruboclean

**ruboclean** puts `.rubocop.yml` into order. It groups the configuration into three groups:

1. "Base"-configuration like `require`, `inherit_from`, etc.
2. `Namespaces`
3. `Namespace/Cops`

Finally it orders the configurations **alphabetically** within these groups.

## Main example

### Input `.rubocop.yml`:

```yml
Rails/ShortI18n:
  Enabled: true

Layout/LineLength:
  Max: 120

Rails:
  Enabled: true

AllCops:
  Exclude:
  - path/file_exists.rb
  - path_with_files/**/*
  - path/file_does_not_exist.rb # This entry will be removed if the file doesn't exist. Skip with --preserve-paths option.
  - path_without_files/**/* # Will be removed if no files within pattern exist. Skip with --preserve-paths option.

# Preceding comments will be removed unless the --preserve-comments option is used.
require:
- rubocop-rails # Inline comments will always be removed.
```

### Output `.rubocop.yml`:

```yml
---

require:
- rubocop-rails

AllCops:
  Exclude:
  - path/file_exists.rb
  - path_with_files/**/*

Rails:
  Enabled: true

Layout/LineLength:
  Max: 120

Rails/ShortI18n:
  Enabled: true
```

## Installation

Add this line to your application's Gemfile:

```ruby
gem "ruboclean", require: false
```

And then execute:

```shell
bundle install
```

Or install it yourself as:

```shell
gem install ruboclean
```

## Command synopsis

```shell
ruboclean [path] \
  [--output=/path/to/file.yml] \
  [--silent] \
  [--preserve-comments] \
  [--preserve-paths] \
  [--verify]
```

### Parameters

#### `path`

Can be a directory that contains a `.rubocop.yml`, or a path to a `.rubocop.yml` directly.
Defaults to the current working directory.

##### Examples

```shell
ruboclean                             # uses `.rubocop.yml` of current working directory
ruboclean /path/to/dir                # uses `.rubocop.yml` of /path/to/dir
ruboclean /path/to/dir/.rubocop.yml
```

#### `--output=/path/to/file.yml`

Output path where the result is written to.
Can be absolute or relative to the current working directory.
`--output=STDOUT` prints it to STDOUT and not to a file.

##### Examples

```shell
ruboclean --output=/absolute/path.yml
ruboclean --output=relative/path.yml    # relative to current working directory
ruboclean --output=STDOUT               # does not write anything to a file
```

#### `--silent`

Suppress any log output displayed on the screen when executing the command.
It still prints to STDOUT if used in combination with `--output=STDOUT`.

#### `--preserve-comments`

Preserves **preceding** comments for each top-level entry in the configuration.
Inline comments are **not** preserved.

See main example above for explanation.

#### `--preserve-paths`

Skips the path cleanup that are applied against `Include:` and `Exclude:` configurations.

See main example above for explanation.

#### `--verify`

Executes in dry-run mode. Exits with `1` if changes are needed, otherwise `0`.

## Development

After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).

## Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/lxxxvi/ruboclean. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/lxxxvi/ruboclean/blob/main/CODE_OF_CONDUCT.md).

## 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 Ruboclean project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/lxxxvi/ruboclean/blob/main/CODE_OF_CONDUCT.md).