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

Change EnforcedStyle to standard_error for Lint/InheritException #10407

Merged

Conversation

koic
Copy link
Member

@koic koic commented Feb 9, 2022

This PR change EnforcedStyle from runtime_error to standard_error for Lint/InheritException.

I noticed this while investigating #10406.

Below is the inheritance tree for the exception classes.

---------------
|  Exception  |
---------------
      ^
      |
---------------
|StandardError| (default for `rescue`)
---------------
      ^
      |
---------------
|RuntimeError | (default for `raise`)
---------------

AFAIK, it seems that custom exceptions generally inherit from StandardError.
Subclasses of StandardError are handled with rescue by default.

raise creates a RuntimeError when the exception class is omitted.
If custom exception inherits from RuntimeError, the custom exception and RuntimeError will be is-a.
If custom exception inherits from StandardError, the custom exception and RuntimeError will not be is-a.
In other words, inheriting StandardError will not be mistakenly handled as raise which omits the exception class.

So, inheriting StandardError rather than RuntimeError does not include unnecessary inheritance for rescue handling.


Before submitting the PR make sure the following are checked:

  • The PR relates to only one subject with a clear title and description in grammatically correct, complete sentences.
  • Wrote good commit messages.
  • Commit message starts with [Fix #issue-number] (if the related issue exists).
  • Feature branch is up-to-date with master (if not - rebase it).
  • Squashed related commits together.
  • Added tests.
  • Ran bundle exec rake default. It executes all tests and runs RuboCop on its own code.
  • Added an entry (file) to the changelog folder named {change_type}_{change_description}.md if the new code introduces user-observable changes. See changelog entry format for details.

This PR change `EnforcedStyle` from `runtime_error` to `standard_error`
for `Lint/InheritException`.

I noticed this while investigating rubocop#10406.

Below is the inheritance tree for the exception classes.

```
---------------
|  Exception  |
---------------
      ^
      |
---------------
|StandardError| (default for `rescue`)
---------------
      ^
      |
---------------
|RuntimeError | (default for `raise`)
---------------
```

AFAIK, it seems that custom exceptions generally inherit from `StandardError`.
Subclasses of `StandardError` are handled with `rescue` by default.

`raise` creates a `RuntimeError` when the exception class is omitted.
If custom exception inherits from `RuntimeError`, the custom exception
and `RuntimeError` will be is-a.
If custom exception inherits from `StandardError`, the custom exception
and `RuntimeError` will not be is-a.
In other words, inheriting `StandardError` will not be mistakenly
handled as `raise` which omits the exception class.

So, inheriting `StandardError` rather than `RuntimeError` does not include
unnecessary inheritance for `rescue` handling.
@koic koic force-pushed the change_enforced_style_for_lint_inherit_exception branch from 7f472a0 to bb3a8ab Compare February 11, 2022 09:17
@bbatsov bbatsov merged commit 1bd576e into rubocop:master Feb 13, 2022
@bbatsov
Copy link
Collaborator

bbatsov commented Feb 13, 2022

Good catch!

@koic koic deleted the change_enforced_style_for_lint_inherit_exception branch February 13, 2022 08:30
koic added a commit that referenced this pull request Feb 13, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants