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

Enable isort-style required-imports enforcement #1762

Merged
merged 3 commits into from Jan 10, 2023

Conversation

charliermarsh
Copy link
Member

@charliermarsh charliermarsh commented Jan 10, 2023

In isort, this is called add-imports, but I prefer the declarative name.

The idea is that by adding the following to your pyproject.toml, you can ensure that the import is included in all files:

[tool.ruff.isort]
required-imports = ["from __future__ import annotations"]

I mostly reverse-engineered isort's logic for making decisions, though I made some slight tweaks that I think are preferable. A few comments:

  • Like isort, we don't enforce this on empty files (like empty __init__.py).
  • Like isort, we require that the import is at the top-level.
  • isort will skip any docstrings, and any comments on the first three lines (I think, based on testing). Ruff places the import after the last docstring or comment in the file preamble (that is: after the last docstring or comment that comes before the first non-docstring and non-comment).

Resolves #1700.

@charliermarsh
Copy link
Member Author

Two more things here: (1) support straight imports (import os, as opposed to from os import ...), and (2) add tests.

@charliermarsh charliermarsh merged commit f1a5e53 into main Jan 10, 2023
@charliermarsh charliermarsh deleted the charlie/add-imports branch January 10, 2023 23:12
renovate bot added a commit to ixm-one/pytest-cmake-presets that referenced this pull request Jan 11, 2023
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [ruff](https://togithub.com/charliermarsh/ruff) | `^0.0.217` ->
`^0.0.218` |
[![age](https://badges.renovateapi.com/packages/pypi/ruff/0.0.218/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/pypi/ruff/0.0.218/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/pypi/ruff/0.0.218/compatibility-slim/0.0.217)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/pypi/ruff/0.0.218/confidence-slim/0.0.217)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>charliermarsh/ruff</summary>

###
[`v0.0.218`](https://togithub.com/charliermarsh/ruff/releases/tag/v0.0.218)

[Compare
Source](https://togithub.com/charliermarsh/ruff/compare/v0.0.217...v0.0.218)

#### What's Changed

- Implement flake8-simplify SIM112 by
[@&#8203;messense](https://togithub.com/messense) in
[astral-sh/ruff#1764
- Do not autofix PT004 and PT005 by
[@&#8203;harupy](https://togithub.com/harupy) in
[astral-sh/ruff#1763
- Disable release builds on CI by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#1761
- Move CONTRIBUTING.md to top-level by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#1768
- \[`flake8-bandit`] Add Rule for `S508` (snmp insecure version) &
`S509` (snmp weak cryptography) by
[@&#8203;saadmk11](https://togithub.com/saadmk11) in
[astral-sh/ruff#1771
- Generate RuleCode::origin() via macro by
[@&#8203;not-my-profile](https://togithub.com/not-my-profile) in
[astral-sh/ruff#1770
- Disable doctests by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#1772
- Enable isort-style `required-imports` enforcement by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#1762
- Pyupgrade: Format specifiers by
[@&#8203;colin99d](https://togithub.com/colin99d) in
[astral-sh/ruff#1594
- Avoid B023 false-positives for some common builtins by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#1776

**Full Changelog**:
astral-sh/ruff@v0.0.217...v0.0.218

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://app.renovatebot.com/dashboard#github/ixm-one/pytest-cmake-presets).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNC45Ny4xIiwidXBkYXRlZEluVmVyIjoiMzQuOTcuMSJ9-->

Signed-off-by: Renovate Bot <bot@renovateapp.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
@ashb
Copy link
Contributor

ashb commented Jan 12, 2023

Amazing timing @charliermarsh - I just went looking for this for Airflow

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.

Feature Request: Please support isort add_imports option
2 participants