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

Implement flake8-i18n #3741

Merged
merged 13 commits into from
Mar 27, 2023
Merged

Conversation

leiserfg
Copy link
Contributor

@leiserfg leiserfg commented Mar 26, 2023

  • Add skelleton code
  • Add fixtures for flake8_i18n
  • Add tests
  • Add implementation and insta snapshots
  • Add license entry

Closes #3294.

@github-actions
Copy link
Contributor

github-actions bot commented Mar 26, 2023

PR Check Results

Ecosystem

ℹ️ ecosystem check detected changes. (+1, -0, 0 error(s))

zulip (+1, -0)

+ corporate/lib/stripe.py:1010:17: INT001 f-string is resolved before function call; consider `_("string %s") % arg`

Benchmark

Linux

group                                      main                                   pr
-----                                      ----                                   --
linter/all-rules/large/dataset.py          1.00     14.5±0.08ms     2.8 MB/sec    1.00     14.5±0.06ms     2.8 MB/sec
linter/all-rules/numpy/ctypeslib.py        1.00      3.8±0.03ms     4.4 MB/sec    1.00      3.8±0.02ms     4.4 MB/sec
linter/all-rules/numpy/globals.py          1.01    435.3±1.56µs     6.8 MB/sec    1.00    433.0±1.58µs     6.8 MB/sec
linter/all-rules/pydantic/types.py         1.00      6.4±0.02ms     4.0 MB/sec    1.02      6.5±0.05ms     3.9 MB/sec
linter/default-rules/large/dataset.py      1.01      7.9±0.06ms     5.2 MB/sec    1.00      7.8±0.04ms     5.2 MB/sec
linter/default-rules/numpy/ctypeslib.py    1.01   1712.6±9.61µs     9.7 MB/sec    1.00   1694.7±2.78µs     9.8 MB/sec
linter/default-rules/numpy/globals.py      1.00    175.8±0.89µs    16.8 MB/sec    1.01    177.0±0.44µs    16.7 MB/sec
linter/default-rules/pydantic/types.py     1.01      3.7±0.01ms     6.9 MB/sec    1.00      3.6±0.01ms     7.0 MB/sec

Windows

group                                      main                                   pr
-----                                      ----                                   --
linter/all-rules/large/dataset.py          1.00     15.5±0.13ms     2.6 MB/sec    1.00     15.6±0.15ms     2.6 MB/sec
linter/all-rules/numpy/ctypeslib.py        1.00      4.2±0.06ms     4.0 MB/sec    1.00      4.2±0.05ms     4.0 MB/sec
linter/all-rules/numpy/globals.py          1.01    463.1±7.69µs     6.4 MB/sec    1.00    458.3±8.02µs     6.4 MB/sec
linter/all-rules/pydantic/types.py         1.00      6.9±0.08ms     3.7 MB/sec    1.00      6.9±0.10ms     3.7 MB/sec
linter/default-rules/large/dataset.py      1.00      8.3±0.06ms     4.9 MB/sec    1.00      8.3±0.06ms     4.9 MB/sec
linter/default-rules/numpy/ctypeslib.py    1.00  1785.6±17.06µs     9.3 MB/sec    1.01  1794.8±17.34µs     9.3 MB/sec
linter/default-rules/numpy/globals.py      1.00    185.5±2.06µs    15.9 MB/sec    1.00    185.5±6.65µs    15.9 MB/sec
linter/default-rules/pydantic/types.py     1.01      3.9±0.03ms     6.6 MB/sec    1.00      3.9±0.03ms     6.6 MB/sec

Comment on lines 2913 to 2917
if let Some(diagnostic) =
flake8_i18n::rules::f_string_in_i18n_func_call(args)
{
self.diagnostics.push(diagnostic);
}
Copy link
Member

Choose a reason for hiding this comment

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

Nit:

Suggested change
if let Some(diagnostic) =
flake8_i18n::rules::f_string_in_i18n_func_call(args)
{
self.diagnostics.push(diagnostic);
}
self.diagnostics.extend(flake8_i18n::rules::f_string_in_i18n_func_call(args))

Comment on lines 28 to 40
pub function_names: Option<Vec<String>>,

#[option(
default = r#"["_", "gettext", "ngettext"]"#,
value_type = "list[str]",
example = r#"
[tool.ruff.flake8-i18n]
extend-function-names = ["ugettetxt"]
"#
)]
/// This will be appended to the function_names
/// (or to the default values if that field is missing)
pub extend_function_names: Option<Vec<String>>,
Copy link
Member

Choose a reason for hiding this comment

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

Can we use Vec<String> directly or is it important to know whether the settings where empty vs None

Copy link
Contributor Author

Choose a reason for hiding this comment

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

True, it's fine to use a regular Vec here.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

After this change tests are failing in CI but no idea why, 'cause they pass locally.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I see, some changes in main, I will rebase to fix them.

@charliermarsh charliermarsh added the rule Implementing or modifying a lint rule label Mar 27, 2023
@charliermarsh
Copy link
Member

Nice work here. I made a few minor but otherwise merging as-is. Thanks for getting involved :)

.unwrap_or_else(default_func_names)
.into_iter()
.chain(options.extend_function_names)
.collect(),
Copy link
Member

Choose a reason for hiding this comment

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

I changed this to use an iterator.

@charliermarsh charliermarsh enabled auto-merge (squash) March 27, 2023 17:49
@charliermarsh charliermarsh merged commit 5cb1203 into astral-sh:main Mar 27, 2023
@@ -195,6 +195,8 @@ are:
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
"""

- flake8-i18n, licensed as "GNU General Public License v2 (GPLv2)".
Copy link
Contributor

@AA-Turner AA-Turner Mar 27, 2023

Choose a reason for hiding this comment

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

@charliermarsh -- I'm not certain on this but wanted to ask the question -- does including a GPL tool in Ruff mean that (all/part of) Ruff would be considered a derivative work for the purposes of GPL, and therefore that Ruff would need to be re-licenced (or this PR reverted or etc)? This is the first GPL tool to be integrated, and I wanted to flag the concern as early as possible. Thanks, Adam

Copy link
Member

Choose a reason for hiding this comment

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

Lemme look into it.

Copy link
Contributor Author

@leiserfg leiserfg Mar 27, 2023

Choose a reason for hiding this comment

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

There are already other parts including GPL3 (flake8-django for instance).

  • edit: well only that one, but I think GPL3 is even more infectious than GPL2.

Copy link
Member

Choose a reason for hiding this comment

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

I'll have to get some more informed opinions on this, I'm not sure myself on whether these constitute derivative works.

If they do, and we'd have to re-license under GPL, then I'd err on the side of removing them, or going back to the authors and asking if they'd consider re-licensing under MIT or a dual license.

flake8-django is confusing because on PyPI it appears dual-licensed, and it includes the MIT trove classifiers:

Screen Shot 2023-03-27 at 4 54 36 PM
Screen Shot 2023-03-27 at 4 55 30 PM

Copy link
Contributor

Choose a reason for hiding this comment

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

I'll have to get some more informed opinions on this, I'm not sure myself on whether these constitute derivative works.

Sorry to cause the trouble and thank you both for looking in to this.

flake8-django is confusing because on PyPI it appears dual-licensed, and it includes the MIT trove classifiers:

It seems this has been noted already: rocioar/flake8-django#101 and rocioar/flake8-django#102. Sorry not to have flagged this at the time for flake8-django, but it seems the MIT trove classifier may have been a mistake when that project adopted Poetry.

A

Copy link
Member

Choose a reason for hiding this comment

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

No, thank you for calling this out! It's important to get right. I'll try to reach out to the flake8-django maintainer.

Copy link

Choose a reason for hiding this comment

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

Hum... This is such a common "idea", I've done it before without even knowing about flake8-i18n. We were working in a project and switched to Python 3.6 and many members of a the team started to use f-strings inside _. I became such a common mistake we had to "invent" our checker.

I'm not a lawyer, but I don't think this can be gathered as derivative work.

charliermarsh added a commit that referenced this pull request Mar 27, 2023
@leiserfg
Copy link
Contributor Author

@charliermarsh should I talk to @vharitonsky to see if he can change the license for us or will you do it?

@charliermarsh
Copy link
Member

@leiserfg - If you're willing to that'd be great.

@leiserfg
Copy link
Contributor Author

To be honest, I don't think this can be considered derivative work as we barely used some of their ideas, and ideas can be patented but not copyrighted.

@leiserfg
Copy link
Contributor Author

@charliermarsh I found another implementation that does basically the same and is licensed under BSD, is it fine if we reference that one instead?

@charliermarsh
Copy link
Member

@leiserfg - Yeah that looks fine to me. I do think we could in theory include these rules without referencing flake8-i18n, especially since the issue that was raised on Ruff pre-dated any knowledge of that plugin. But it seems most straightforward to base it on flake8-gettext. Want to put up a PR?

@charliermarsh
Copy link
Member

Let's continue to use the INT codes (which I think differs from either of those plugins).

@leiserfg
Copy link
Contributor Author

#3785

@charliermarsh
Copy link
Member

Thx!

renovate bot referenced this pull request in ixm-one/pytest-cmake-presets Mar 30, 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.259` ->
`^0.0.260` |
[![age](https://badges.renovateapi.com/packages/pypi/ruff/0.0.260/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/pypi/ruff/0.0.260/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/pypi/ruff/0.0.260/compatibility-slim/0.0.259)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/pypi/ruff/0.0.260/confidence-slim/0.0.259)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

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

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

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

<!-- Release notes generated using configuration in .github/release.yml
at main -->

#### What's Changed

##### Rules

- \[`flake8-bugbear`] Add more immutable functions for `B008` by
[@&#8203;rouge8](https://togithub.com/rouge8) in
[https://github.com/charliermarsh/ruff/pull/3764](https://togithub.com/charliermarsh/ruff/pull/3764)
- \[`flake8-bugbear`] Allow `pathlib.Path()` in `B008` by
[@&#8203;rouge8](https://togithub.com/rouge8) in
[https://github.com/charliermarsh/ruff/pull/3794](https://togithub.com/charliermarsh/ruff/pull/3794)
- \[`flake8-bugbear`] Expand the scope of useless-expression (B018) by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/3455](https://togithub.com/charliermarsh/ruff/pull/3455)
- \[`flake8-bugbear`]: Implement rule `B031` by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[https://github.com/charliermarsh/ruff/pull/3680](https://togithub.com/charliermarsh/ruff/pull/3680)
- \[`flake8-gettext`] Implement `flake8-gettext` by
[@&#8203;leiserfg](https://togithub.com/leiserfg) in
[https://github.com/charliermarsh/ruff/pull/3785](https://togithub.com/charliermarsh/ruff/pull/3785)
- \[`flake8-logging-format`] Add support for `.log(level, msg)` calls in
`flake8-logging-format` by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[https://github.com/charliermarsh/ruff/pull/3726](https://togithub.com/charliermarsh/ruff/pull/3726)
- \[`flake8-logging-format`] Allow aliased `logging` module as a logger
candidate by [@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[https://github.com/charliermarsh/ruff/pull/3718](https://togithub.com/charliermarsh/ruff/pull/3718)
- \[`flake8-pyi`] Add autofix for `PYI014` by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[https://github.com/charliermarsh/ruff/pull/3729](https://togithub.com/charliermarsh/ruff/pull/3729)
- \[`flake8-pyi`] Implement `PYI012` by
[@&#8203;JBLDKY](https://togithub.com/JBLDKY) in
[https://github.com/charliermarsh/ruff/pull/3743](https://togithub.com/charliermarsh/ruff/pull/3743)
- \[`flake8-pyi`] Implement `PYI015` by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[https://github.com/charliermarsh/ruff/pull/3728](https://togithub.com/charliermarsh/ruff/pull/3728)
- \[`flake8-simplify`] Fix SIM222 and SIM223 false negative by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[https://github.com/charliermarsh/ruff/pull/3740](https://togithub.com/charliermarsh/ruff/pull/3740)
- \[`isort`]: support submodules in known\_(first|third)\_party config
options by [@&#8203;astaric](https://togithub.com/astaric) in
[https://github.com/charliermarsh/ruff/pull/3768](https://togithub.com/charliermarsh/ruff/pull/3768)
- \[`pycodestyle`] Use unicode-width to determine line-length instead of
character count by
[@&#8203;MichaReiser](https://togithub.com/MichaReiser) in
[https://github.com/charliermarsh/ruff/pull/3714](https://togithub.com/charliermarsh/ruff/pull/3714)
- \[`pydocstyle`] Implement autofix for `D403` by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[https://github.com/charliermarsh/ruff/pull/3731](https://togithub.com/charliermarsh/ruff/pull/3731)
- \[`pylint`] Avoid `useless-import alias` (`C0414`) in `.pyi` files by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/3761](https://togithub.com/charliermarsh/ruff/pull/3761)
- \[`pylint`] Exempt `PLR1711` and `RET501` if non-`None` annotation by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[https://github.com/charliermarsh/ruff/pull/3705](https://togithub.com/charliermarsh/ruff/pull/3705)
- \[`tryceratops`] Exempt return with side effects for TRY300 by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[https://github.com/charliermarsh/ruff/pull/3780](https://togithub.com/charliermarsh/ruff/pull/3780)

##### Bug Fixes

- Avoid parsing `ForwardRef` contents as type references by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/3698](https://togithub.com/charliermarsh/ruff/pull/3698)
- Avoid parsing f-strings in type annotations by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/3699](https://togithub.com/charliermarsh/ruff/pull/3699)
- Include `with` statements in complexity calculation by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/3771](https://togithub.com/charliermarsh/ruff/pull/3771)
- Use import alias locations for `pep8-naming` import rules by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/3772](https://togithub.com/charliermarsh/ruff/pull/3772)
- Allow `TID252` to fix all valid module paths by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[https://github.com/charliermarsh/ruff/pull/3796](https://togithub.com/charliermarsh/ruff/pull/3796)
- Fix SIM118 auto-fix by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[https://github.com/charliermarsh/ruff/pull/3695](https://togithub.com/charliermarsh/ruff/pull/3695)
- Avoid panics for implicitly concatenated forward references by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/3700](https://togithub.com/charliermarsh/ruff/pull/3700)
- Allow simple container literals as default values by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[https://github.com/charliermarsh/ruff/pull/3703](https://togithub.com/charliermarsh/ruff/pull/3703)
- Traverse over nested string type annotations by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/3724](https://togithub.com/charliermarsh/ruff/pull/3724)
- Use `wild::args()` and add `wild` as a dependency by
[@&#8203;agriyakhetarpal](https://togithub.com/agriyakhetarpal) in
[https://github.com/charliermarsh/ruff/pull/3739](https://togithub.com/charliermarsh/ruff/pull/3739)
- Avoid overlong-line errors for lines that end with URLs by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/3663](https://togithub.com/charliermarsh/ruff/pull/3663)
- Sort statistics by count by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[https://github.com/charliermarsh/ruff/pull/3748](https://togithub.com/charliermarsh/ruff/pull/3748)
- Reduce explicit clones by
[@&#8203;MichaReiser](https://togithub.com/MichaReiser) in
[https://github.com/charliermarsh/ruff/pull/3793](https://togithub.com/charliermarsh/ruff/pull/3793)
- Add flymake-ruff to docs by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/3800](https://togithub.com/charliermarsh/ruff/pull/3800)

#### New Contributors

- [@&#8203;agriyakhetarpal](https://togithub.com/agriyakhetarpal) made
their first contribution in
[https://github.com/charliermarsh/ruff/pull/3739](https://togithub.com/charliermarsh/ruff/pull/3739)
- [@&#8203;leiserfg](https://togithub.com/leiserfg) made their first
contribution in
[https://github.com/charliermarsh/ruff/pull/3741](https://togithub.com/charliermarsh/ruff/pull/3741)
- [@&#8203;JBLDKY](https://togithub.com/JBLDKY) made their first
contribution in
[https://github.com/charliermarsh/ruff/pull/3743](https://togithub.com/charliermarsh/ruff/pull/3743)
- [@&#8203;astaric](https://togithub.com/astaric) made their first
contribution in
[https://github.com/charliermarsh/ruff/pull/3768](https://togithub.com/charliermarsh/ruff/pull/3768)

**Full Changelog**:
astral-sh/ruff@v0.0.259...v0.0.260

</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:eyJjcmVhdGVkSW5WZXIiOiIzNS4yMi4xIiwidXBkYXRlZEluVmVyIjoiMzUuMjIuMSJ9-->

Signed-off-by: Renovate Bot <bot@renovateapp.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
renovate bot referenced this pull request in allenporter/pyrainbird Mar 31, 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.259` ->
`==0.0.260` |
[![age](https://badges.renovateapi.com/packages/pypi/ruff/0.0.260/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/pypi/ruff/0.0.260/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/pypi/ruff/0.0.260/compatibility-slim/0.0.259)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/pypi/ruff/0.0.260/confidence-slim/0.0.259)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

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

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

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

<!-- Release notes generated using configuration in .github/release.yml
at main -->

#### What's Changed

##### Rules

- \[`flake8-bugbear`] Add more immutable functions for `B008` by
[@&#8203;rouge8](https://togithub.com/rouge8) in
[https://github.com/charliermarsh/ruff/pull/3764](https://togithub.com/charliermarsh/ruff/pull/3764)
- \[`flake8-bugbear`] Allow `pathlib.Path()` in `B008` by
[@&#8203;rouge8](https://togithub.com/rouge8) in
[https://github.com/charliermarsh/ruff/pull/3794](https://togithub.com/charliermarsh/ruff/pull/3794)
- \[`flake8-bugbear`] Expand the scope of useless-expression (B018) by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/3455](https://togithub.com/charliermarsh/ruff/pull/3455)
- \[`flake8-bugbear`]: Implement rule `B031` by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[https://github.com/charliermarsh/ruff/pull/3680](https://togithub.com/charliermarsh/ruff/pull/3680)
- \[`flake8-gettext`] Implement `flake8-gettext` by
[@&#8203;leiserfg](https://togithub.com/leiserfg) in
[https://github.com/charliermarsh/ruff/pull/3785](https://togithub.com/charliermarsh/ruff/pull/3785)
- \[`flake8-logging-format`] Add support for `.log(level, msg)` calls in
`flake8-logging-format` by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[https://github.com/charliermarsh/ruff/pull/3726](https://togithub.com/charliermarsh/ruff/pull/3726)
- \[`flake8-logging-format`] Allow aliased `logging` module as a logger
candidate by [@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[https://github.com/charliermarsh/ruff/pull/3718](https://togithub.com/charliermarsh/ruff/pull/3718)
- \[`flake8-pyi`] Add autofix for `PYI014` by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[https://github.com/charliermarsh/ruff/pull/3729](https://togithub.com/charliermarsh/ruff/pull/3729)
- \[`flake8-pyi`] Implement `PYI012` by
[@&#8203;JBLDKY](https://togithub.com/JBLDKY) in
[https://github.com/charliermarsh/ruff/pull/3743](https://togithub.com/charliermarsh/ruff/pull/3743)
- \[`flake8-pyi`] Implement `PYI015` by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[https://github.com/charliermarsh/ruff/pull/3728](https://togithub.com/charliermarsh/ruff/pull/3728)
- \[`flake8-simplify`] Fix SIM222 and SIM223 false negative by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[https://github.com/charliermarsh/ruff/pull/3740](https://togithub.com/charliermarsh/ruff/pull/3740)
- \[`isort`]: support submodules in known\_(first|third)\_party config
options by [@&#8203;astaric](https://togithub.com/astaric) in
[https://github.com/charliermarsh/ruff/pull/3768](https://togithub.com/charliermarsh/ruff/pull/3768)
- \[`pycodestyle`] Use unicode-width to determine line-length instead of
character count by
[@&#8203;MichaReiser](https://togithub.com/MichaReiser) in
[https://github.com/charliermarsh/ruff/pull/3714](https://togithub.com/charliermarsh/ruff/pull/3714)
- \[`pydocstyle`] Implement autofix for `D403` by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[https://github.com/charliermarsh/ruff/pull/3731](https://togithub.com/charliermarsh/ruff/pull/3731)
- \[`pylint`] Avoid `useless-import alias` (`C0414`) in `.pyi` files by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/3761](https://togithub.com/charliermarsh/ruff/pull/3761)
- \[`pylint`] Exempt `PLR1711` and `RET501` if non-`None` annotation by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[https://github.com/charliermarsh/ruff/pull/3705](https://togithub.com/charliermarsh/ruff/pull/3705)
- \[`tryceratops`] Exempt return with side effects for TRY300 by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[https://github.com/charliermarsh/ruff/pull/3780](https://togithub.com/charliermarsh/ruff/pull/3780)

##### Bug Fixes

- Avoid parsing `ForwardRef` contents as type references by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/3698](https://togithub.com/charliermarsh/ruff/pull/3698)
- Avoid parsing f-strings in type annotations by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/3699](https://togithub.com/charliermarsh/ruff/pull/3699)
- Include `with` statements in complexity calculation by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/3771](https://togithub.com/charliermarsh/ruff/pull/3771)
- Use import alias locations for `pep8-naming` import rules by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/3772](https://togithub.com/charliermarsh/ruff/pull/3772)
- Allow `TID252` to fix all valid module paths by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[https://github.com/charliermarsh/ruff/pull/3796](https://togithub.com/charliermarsh/ruff/pull/3796)
- Fix SIM118 auto-fix by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[https://github.com/charliermarsh/ruff/pull/3695](https://togithub.com/charliermarsh/ruff/pull/3695)
- Avoid panics for implicitly concatenated forward references by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/3700](https://togithub.com/charliermarsh/ruff/pull/3700)
- Allow simple container literals as default values by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[https://github.com/charliermarsh/ruff/pull/3703](https://togithub.com/charliermarsh/ruff/pull/3703)
- Traverse over nested string type annotations by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/3724](https://togithub.com/charliermarsh/ruff/pull/3724)
- Use `wild::args()` and add `wild` as a dependency by
[@&#8203;agriyakhetarpal](https://togithub.com/agriyakhetarpal) in
[https://github.com/charliermarsh/ruff/pull/3739](https://togithub.com/charliermarsh/ruff/pull/3739)
- Avoid overlong-line errors for lines that end with URLs by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/3663](https://togithub.com/charliermarsh/ruff/pull/3663)
- Sort statistics by count by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[https://github.com/charliermarsh/ruff/pull/3748](https://togithub.com/charliermarsh/ruff/pull/3748)
- Reduce explicit clones by
[@&#8203;MichaReiser](https://togithub.com/MichaReiser) in
[https://github.com/charliermarsh/ruff/pull/3793](https://togithub.com/charliermarsh/ruff/pull/3793)
- Add flymake-ruff to docs by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/3800](https://togithub.com/charliermarsh/ruff/pull/3800)

#### New Contributors

- [@&#8203;agriyakhetarpal](https://togithub.com/agriyakhetarpal) made
their first contribution in
[https://github.com/charliermarsh/ruff/pull/3739](https://togithub.com/charliermarsh/ruff/pull/3739)
- [@&#8203;leiserfg](https://togithub.com/leiserfg) made their first
contribution in
[https://github.com/charliermarsh/ruff/pull/3741](https://togithub.com/charliermarsh/ruff/pull/3741)
- [@&#8203;JBLDKY](https://togithub.com/JBLDKY) made their first
contribution in
[https://github.com/charliermarsh/ruff/pull/3743](https://togithub.com/charliermarsh/ruff/pull/3743)
- [@&#8203;astaric](https://togithub.com/astaric) made their first
contribution in
[https://github.com/charliermarsh/ruff/pull/3768](https://togithub.com/charliermarsh/ruff/pull/3768)

**Full Changelog**:
astral-sh/ruff@v0.0.259...v0.0.260

</details>

---

### Configuration

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

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, 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/allenporter/pyrainbird).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS4yMy4zIiwidXBkYXRlZEluVmVyIjoiMzUuMjMuMyJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
renovate bot referenced this pull request in allenporter/flux-local Apr 1, 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.259` ->
`==0.0.260` |
[![age](https://badges.renovateapi.com/packages/pypi/ruff/0.0.260/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/pypi/ruff/0.0.260/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/pypi/ruff/0.0.260/compatibility-slim/0.0.259)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/pypi/ruff/0.0.260/confidence-slim/0.0.259)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

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

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

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

<!-- Release notes generated using configuration in .github/release.yml
at main -->

#### What's Changed

##### Rules

- \[`flake8-bugbear`] Add more immutable functions for `B008` by
[@&#8203;rouge8](https://togithub.com/rouge8) in
[https://github.com/charliermarsh/ruff/pull/3764](https://togithub.com/charliermarsh/ruff/pull/3764)
- \[`flake8-bugbear`] Allow `pathlib.Path()` in `B008` by
[@&#8203;rouge8](https://togithub.com/rouge8) in
[https://github.com/charliermarsh/ruff/pull/3794](https://togithub.com/charliermarsh/ruff/pull/3794)
- \[`flake8-bugbear`] Expand the scope of useless-expression (B018) by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/3455](https://togithub.com/charliermarsh/ruff/pull/3455)
- \[`flake8-bugbear`]: Implement rule `B031` by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[https://github.com/charliermarsh/ruff/pull/3680](https://togithub.com/charliermarsh/ruff/pull/3680)
- \[`flake8-gettext`] Implement `flake8-gettext` by
[@&#8203;leiserfg](https://togithub.com/leiserfg) in
[https://github.com/charliermarsh/ruff/pull/3785](https://togithub.com/charliermarsh/ruff/pull/3785)
- \[`flake8-logging-format`] Add support for `.log(level, msg)` calls in
`flake8-logging-format` by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[https://github.com/charliermarsh/ruff/pull/3726](https://togithub.com/charliermarsh/ruff/pull/3726)
- \[`flake8-logging-format`] Allow aliased `logging` module as a logger
candidate by [@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[https://github.com/charliermarsh/ruff/pull/3718](https://togithub.com/charliermarsh/ruff/pull/3718)
- \[`flake8-pyi`] Add autofix for `PYI014` by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[https://github.com/charliermarsh/ruff/pull/3729](https://togithub.com/charliermarsh/ruff/pull/3729)
- \[`flake8-pyi`] Implement `PYI012` by
[@&#8203;JBLDKY](https://togithub.com/JBLDKY) in
[https://github.com/charliermarsh/ruff/pull/3743](https://togithub.com/charliermarsh/ruff/pull/3743)
- \[`flake8-pyi`] Implement `PYI015` by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[https://github.com/charliermarsh/ruff/pull/3728](https://togithub.com/charliermarsh/ruff/pull/3728)
- \[`flake8-simplify`] Fix SIM222 and SIM223 false negative by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[https://github.com/charliermarsh/ruff/pull/3740](https://togithub.com/charliermarsh/ruff/pull/3740)
- \[`isort`]: support submodules in known\_(first|third)\_party config
options by [@&#8203;astaric](https://togithub.com/astaric) in
[https://github.com/charliermarsh/ruff/pull/3768](https://togithub.com/charliermarsh/ruff/pull/3768)
- \[`pycodestyle`] Use unicode-width to determine line-length instead of
character count by
[@&#8203;MichaReiser](https://togithub.com/MichaReiser) in
[https://github.com/charliermarsh/ruff/pull/3714](https://togithub.com/charliermarsh/ruff/pull/3714)
- \[`pydocstyle`] Implement autofix for `D403` by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[https://github.com/charliermarsh/ruff/pull/3731](https://togithub.com/charliermarsh/ruff/pull/3731)
- \[`pylint`] Avoid `useless-import alias` (`C0414`) in `.pyi` files by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/3761](https://togithub.com/charliermarsh/ruff/pull/3761)
- \[`pylint`] Exempt `PLR1711` and `RET501` if non-`None` annotation by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[https://github.com/charliermarsh/ruff/pull/3705](https://togithub.com/charliermarsh/ruff/pull/3705)
- \[`tryceratops`] Exempt return with side effects for TRY300 by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[https://github.com/charliermarsh/ruff/pull/3780](https://togithub.com/charliermarsh/ruff/pull/3780)

##### Bug Fixes

- Avoid parsing `ForwardRef` contents as type references by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/3698](https://togithub.com/charliermarsh/ruff/pull/3698)
- Avoid parsing f-strings in type annotations by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/3699](https://togithub.com/charliermarsh/ruff/pull/3699)
- Include `with` statements in complexity calculation by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/3771](https://togithub.com/charliermarsh/ruff/pull/3771)
- Use import alias locations for `pep8-naming` import rules by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/3772](https://togithub.com/charliermarsh/ruff/pull/3772)
- Allow `TID252` to fix all valid module paths by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[https://github.com/charliermarsh/ruff/pull/3796](https://togithub.com/charliermarsh/ruff/pull/3796)
- Fix SIM118 auto-fix by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[https://github.com/charliermarsh/ruff/pull/3695](https://togithub.com/charliermarsh/ruff/pull/3695)
- Avoid panics for implicitly concatenated forward references by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/3700](https://togithub.com/charliermarsh/ruff/pull/3700)
- Allow simple container literals as default values by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[https://github.com/charliermarsh/ruff/pull/3703](https://togithub.com/charliermarsh/ruff/pull/3703)
- Traverse over nested string type annotations by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/3724](https://togithub.com/charliermarsh/ruff/pull/3724)
- Use `wild::args()` and add `wild` as a dependency by
[@&#8203;agriyakhetarpal](https://togithub.com/agriyakhetarpal) in
[https://github.com/charliermarsh/ruff/pull/3739](https://togithub.com/charliermarsh/ruff/pull/3739)
- Avoid overlong-line errors for lines that end with URLs by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/3663](https://togithub.com/charliermarsh/ruff/pull/3663)
- Sort statistics by count by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[https://github.com/charliermarsh/ruff/pull/3748](https://togithub.com/charliermarsh/ruff/pull/3748)
- Reduce explicit clones by
[@&#8203;MichaReiser](https://togithub.com/MichaReiser) in
[https://github.com/charliermarsh/ruff/pull/3793](https://togithub.com/charliermarsh/ruff/pull/3793)
- Add flymake-ruff to docs by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/3800](https://togithub.com/charliermarsh/ruff/pull/3800)

#### New Contributors

- [@&#8203;agriyakhetarpal](https://togithub.com/agriyakhetarpal) made
their first contribution in
[https://github.com/charliermarsh/ruff/pull/3739](https://togithub.com/charliermarsh/ruff/pull/3739)
- [@&#8203;leiserfg](https://togithub.com/leiserfg) made their first
contribution in
[https://github.com/charliermarsh/ruff/pull/3741](https://togithub.com/charliermarsh/ruff/pull/3741)
- [@&#8203;JBLDKY](https://togithub.com/JBLDKY) made their first
contribution in
[https://github.com/charliermarsh/ruff/pull/3743](https://togithub.com/charliermarsh/ruff/pull/3743)
- [@&#8203;astaric](https://togithub.com/astaric) made their first
contribution in
[https://github.com/charliermarsh/ruff/pull/3768](https://togithub.com/charliermarsh/ruff/pull/3768)

**Full Changelog**:
astral-sh/ruff@v0.0.259...v0.0.260

</details>

---

### Configuration

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

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, 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/allenporter/flux-local).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS4yMi4xIiwidXBkYXRlZEluVmVyIjoiMzUuMjIuMSJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
rule Implementing or modifying a lint rule
Projects
None yet
Development

Successfully merging this pull request may close these issues.

rule for detecting format error in gettext translations
5 participants