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

[ci] [python-package] enable ruff-format on tests and examples #6317

Merged
merged 8 commits into from
Feb 21, 2024

Conversation

jameslamb
Copy link
Collaborator

@jameslamb jameslamb commented Feb 15, 2024

Contributes to #6304.

proposes:

  • enforcing ruff-format on Python modules and notebooks in examples/ and tests/
  • running ruff check over Python code in notebooks

Notes for reviewers

I only made 3 changes here manually:

  • updating python-package/pyproject.toml
  • updating .pre-commit-config.yaml
  • removing ax = assignment in examples/python-guide/notebooks/interactive_plot_example.ipynb
    • to fix this: F841 Local variable 'ax' is assigned to but never used

All other changes were made automatically by ruff.

Relevant docs:

hooks:
- id: isort
name: isort (python)
args: ["--settings-path", "python-package/pyproject.toml"]
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Proposing moving isort up above ruff because they were fighting each other. I think it makes sense to have isort go first since it might do things like remove duplicate imports or re-group them, and then ruff after which will simply reformat them.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

relevant conversation: astral-sh/ruff#8926 (comment)

Copy link
Collaborator Author

@jameslamb jameslamb Feb 16, 2024

Choose a reason for hiding this comment

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

ah nevermind this one, looks like this was a result of me adding profile = "black" to the isort config while testing. Reverted that in 007ed34 and python-package/ changes dropped out of the diff.

Nope, guess we DO need to include python-package/, and a few other changes to the configuration for isort to make it and ruff stop fighting each other. Sorry, was running this on the wrong branch before 😅

@jameslamb jameslamb marked this pull request as ready for review February 16, 2024 06:46
Copy link
Collaborator

@jmoralez jmoralez left a comment

Choose a reason for hiding this comment

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

Thanks!

@@ -237,7 +236,7 @@
"outputs": [
{
"data": {
"image/png": "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\n",
"image/png": "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",
Copy link
Collaborator

Choose a reason for hiding this comment

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

Did it just remove the line break at the end? That's a bit annoying, I don't think we have control on that

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Ah yeah that is kind of annoying. I looked through https://docs.astral.sh/ruff/formatter and the options from ruff format --help and don't see a way to avoid it.

I'm ok with it, I guess, because:

  • there aren't a lot of notebooks in this repo
  • the notebooks in this repo aren't edited frequently
  • it's easy to auto-fix this with pre-commit run --all-files

from .compat import (PANDAS_INSTALLED, PYARROW_INSTALLED, arrow_cffi, arrow_is_floating, arrow_is_integer, concat,
dt_DataTable, pa_Array, pa_chunked_array, pa_ChunkedArray, pa_compute, pa_Table,
pd_CategoricalDtype, pd_DataFrame, pd_Series)
from .compat import (
Copy link
Collaborator

Choose a reason for hiding this comment

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

I love this format, it was super hard to get this right when inserting something in the middle with the previous one.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

same! I'm really happy with this one 😁

@jameslamb
Copy link
Collaborator Author

Thanks for reading through all that @jmoralez !

I'll put up one more big one like this (tests/ and python-package/), and then all the Python code here will be autoformatted 😁 😁 😁

@jameslamb jameslamb merged commit 1b792e7 into master Feb 21, 2024
43 checks passed
@jameslamb jameslamb deleted the ci/more-ruff branch February 21, 2024 18:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants