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

Migrate from isort/Black/Flake8 to Ruff for Code Formatting and Linting #5424

Merged
merged 9 commits into from
Sep 21, 2024

Conversation

snejus
Copy link
Member

@snejus snejus commented Sep 17, 2024

Context

I noticed one of recently merged PRs used unittest assertions that we are migrating from. Thus, I thought it would be a good idea to configure our linting to catch such issues in the future. Since I was here, I replaced our multiple linting and formatting tools with a single tool, Ruff, to simplify and speed up our development workflow.

Summary

This PR migrates the codebase from using isort, Black and Flake8 to Ruff for code formatting and linting. The changes include updates to the GitHub Actions workflow, pre-commit configuration, and documentation to reflect the new tooling.

Changes

  1. GitHub Actions Workflow

    • Updated .github/workflows/lint.yml to use poetry install --only=lint and poe lint --output-format=github.
  2. Pre-commit Configuration

    • Replaced Black and Isort with Ruff in .pre-commit-config.yaml.
  3. Documentation

    • Updated CONTRIBUTING.rst to reflect the use of Ruff for formatting and linting.
    • Modified instructions for running tests and handling external API requests.
  4. Poetry Configuration

    • Removed Black, Isort, Flake8, and related dependencies from poetry.lock and pyproject.toml.
    • Added Ruff as the new linter and formatter in pyproject.toml.
  5. Setup Configuration

    • Removed Flake8 configuration from setup.cfg.
  6. Git blame

    • Introduced .git-blame-ignore-revs file to keep git blame clean from formatting
      changes. Configure your local beets repository to use this file by running:
    $ git config --local blame.ignoreRevsFile .git-blame-ignore-revs

Benefits

  • Performance: Ruff is known for its speed and efficiency, which should improve the developer experience.
  • Consolidation: Using a single tool for both formatting and linting simplifies the development workflow.

How to Test

  1. Linting and Formatting

    • Run poe check-format to check for formatting issues.
    • Run poe format to format the codebase.
    • Run poe lint to check for linting issues.
  2. Pre-commit Hooks

    • Ensure pre-commit hooks are working correctly by running pre-commit run --all-files.
  3. CI Pipeline

    • Verify that the GitHub Actions workflow completes successfully.

Notes

  • Contributions migrating existing tests from unittest to pytest are welcome.
  • External API requests should be mocked using requests_mock and tested weekly in the integration test suite.

References


This PR aims to streamline our development process by adopting Ruff, a modern and efficient tool for Python code formatting and linting.

@snejus snejus self-assigned this Sep 17, 2024
@snejus snejus force-pushed the configure-ruff branch 10 times, most recently from 292996f to 52507cf Compare September 19, 2024 00:00
@snejus snejus force-pushed the configure-ruff branch 3 times, most recently from ef83264 to 9b6b1e9 Compare September 19, 2024 04:03
Copy link
Member

@bal-e bal-e left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For completeness, I've reviewed every file by hand. In almost all cases, I significantly prefer the changes Ruff has introduced. I'm happy with this PR overall -- well done @snejus!

CONTRIBUTING.rst Outdated Show resolved Hide resolved
beetsplug/deezer.py Show resolved Hide resolved
@snejus
Copy link
Member Author

snejus commented Sep 20, 2024

Since this PR depends on integration_test marker introduced in #5406 , will wait until its merged before merging this one.

- Fix imports
- Fix pytest issues
- Do not assign lambda as variable
- Use isinstance instead of type to check type
- Rename ambiguously named variables
- Name custom errors with Error suffix
* Replace `noqa` comments in `assert...` method definitions with
  a configuration option to ignore these names.
* Use the `__all__` variable to specify importable items from the
  module, replacing `*` imports and `noqa` comments for unused imports.
* Address issues with poorly named variables and methods by renaming
  them appropriately.
The variable in `test_ordered_enum` was flagged for naming issues, and
I noticed that `OrderedEnum` is essentially `enum.IntEnum`.

I guess `OrderedEnum` exists because it was created before
`enum.IntEnum` was made available in Python 3.4. We do not need it
anymore though, so it's now gone.
@snejus snejus changed the base branch from fix-lrclib-lyrics to master September 21, 2024 11:10
@snejus
Copy link
Member Author

snejus commented Sep 21, 2024

Since this PR depends on integration_test marker introduced in #5406 , will wait until its merged before merging this one.

Above does not apply anymore - I rebased it on master.

@bal-e
Copy link
Member

bal-e commented Sep 21, 2024

LGTM, @snejus!

This commit introduces a `.git-blame-ignore-revs` file to the
repository. The purpose of this file is to list specific commit hashes
that should be ignored when using the `git blame` command. This is
useful for ignoring commits that involve large-scale formatting changes,
refactoring, or other non-functional changes that would otherwise
clutter the blame history.

I added a couple of previous commit hashes which reformatted the code.

Configure this repository to use this file:

  git config --local blame.ignoreRevsFile .git-blame-ignore-revs
@snejus
Copy link
Member Author

snejus commented Sep 21, 2024

Great, I have just updated the .git-blame-ignore-revs with updated commit hashes.

@snejus snejus merged commit 88d3f04 into master Sep 21, 2024
15 checks passed
@snejus snejus deleted the configure-ruff branch September 21, 2024 12:35
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.

2 participants