Skip to content

Commit 8bded2b

Browse files
committed
Merge branch 'main' into dcreager/constraint-mdtest
* main: (26 commits) Ignore deprecated rules unless selected by exact code (#20167) Stabilize adding future import via config option (#20277) [`flake8-errmsg`] Stabilize extending `raw-string-in-exception` (`EM101`) to support byte strings (#20273) Stabilize the remaining Airflow rules (#20250) [`flake8-bugbear`] Stabilize support for non-context-manager calls in `assert-raises-exception` (`B017`) (#20274) [`flake8-commas`] Stabilize support for trailing comma checks in type parameter lists (`COM812`, `COM819`) (#20275) [`pygrep_hooks`] Stabilize using`AsyncMock` methods in `invalid-mock-access` (`PGH005`) (#20272) Stabilize new strategy for classifying imports as first party (#20268) [`pylint`] Stabilize ignoring `__init__.py` for `useless-import-alias` (`PLC0414`) (#20271) [`pylint`] Stabilize adding U+061C to `bidirectional-unicode` (`PLE2502`) (#20276) [`flake8-simplify`] Stabilize fix safety of `multiple-with-statements` (`SIM117`) (#20270) Stabilize `pytest-raises-ambiguous-pattern` (`RUF043`) (#20253) Stabilize `f-string-number-format` (`FURB116`) (#20247) [`pyupgrade`] Remove `non-pep604-isinstance` (`UP038`) (#19156) [`pandas-vet`] Remove `pandas-df-variable-name` (`PD901`) (#19223) Remove deprecated macOS config file discovery (#19210) Stabilize `redundant-none-literal` (`PYI061`) (#20236) Stabilize `generic-not-last-base-class` (`PYI059`) (#20246) Stabilize `useless-class-metaclass-type` (`UP050`) (#20230) Stabilize `os-symlink` (`PTH211`) (#20229) ...
2 parents 142a958 + 7a75702 commit 8bded2b

File tree

94 files changed

+962
-1942
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

94 files changed

+962
-1942
lines changed

crates/ruff/tests/integration_test.rs

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1489,6 +1489,8 @@ fn deprecated_direct() {
14891489

14901490
#[test]
14911491
fn deprecated_multiple_direct() {
1492+
// Multiple deprecated rules selected by exact code should be included
1493+
// but a warning should be displayed
14921494
let mut cmd = RuffCheck::default()
14931495
.args(["--select", "RUF920", "--select", "RUF921"])
14941496
.build();
@@ -1516,16 +1518,10 @@ fn deprecated_indirect() {
15161518
// since it is not a "direct" selection
15171519
let mut cmd = RuffCheck::default().args(["--select", "RUF92"]).build();
15181520
assert_cmd_snapshot!(cmd, @r"
1519-
success: false
1520-
exit_code: 1
1521+
success: true
1522+
exit_code: 0
15211523
----- stdout -----
1522-
RUF920 Hey this is a deprecated test rule.
1523-
--> -:1:1
1524-
1525-
RUF921 Hey this is another deprecated test rule.
1526-
--> -:1:1
1527-
1528-
Found 2 errors.
1524+
All checks passed!
15291525
15301526
----- stderr -----
15311527
");
@@ -2155,16 +2151,10 @@ extend-safe-fixes = ["RUF9"]
21552151
RUF903 Hey this is a stable test rule with a display only fix.
21562152
--> -:1:1
21572153
2158-
RUF920 Hey this is a deprecated test rule.
2159-
--> -:1:1
2160-
2161-
RUF921 Hey this is another deprecated test rule.
2162-
--> -:1:1
2163-
21642154
RUF950 Hey this is a test rule that was redirected from another.
21652155
--> -:1:1
21662156
2167-
Found 7 errors.
2157+
Found 5 errors.
21682158
[*] 1 fixable with the `--fix` option (1 hidden fix can be enabled with the `--unsafe-fixes` option).
21692159
21702160
----- stderr -----

crates/ruff/tests/lint.rs

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5780,28 +5780,6 @@ match 42: # invalid-syntax
57805780
Ok(())
57815781
}
57825782

5783-
#[test]
5784-
fn future_annotations_preview_warning() {
5785-
assert_cmd_snapshot!(
5786-
Command::new(get_cargo_bin(BIN_NAME))
5787-
.args(STDIN_BASE_OPTIONS)
5788-
.args(["--config", "lint.future-annotations = true"])
5789-
.args(["--select", "F"])
5790-
.arg("--no-preview")
5791-
.arg("-")
5792-
.pass_stdin("1"),
5793-
@r"
5794-
success: true
5795-
exit_code: 0
5796-
----- stdout -----
5797-
All checks passed!
5798-
5799-
----- stderr -----
5800-
warning: The `lint.future-annotations` setting will have no effect because `preview` is disabled
5801-
",
5802-
);
5803-
}
5804-
58055783
#[test]
58065784
fn up045_nested_optional_flatten_all() {
58075785
let contents = "\

crates/ruff/tests/snapshots/integration_test__rule_f401.snap

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ either a redundant alias or, if already present in the file, an `__all__` entry.
5555
to remove third-party and standard library imports -- the fix is unsafe because the module's
5656
interface changes.
5757

58+
See [this FAQ section](https://docs.astral.sh/ruff/faq/#how-does-ruff-determine-which-of-my-imports-are-first-party-third-party-etc)
59+
for more details on how Ruff
60+
determines whether an import is first or third-party.
61+
5862
## Example
5963

6064
```python
@@ -83,11 +87,6 @@ else:
8387
print("numpy is not installed")
8488
```
8589

86-
## Preview
87-
When [preview](https://docs.astral.sh/ruff/preview/) is enabled,
88-
the criterion for determining whether an import is first-party
89-
is stricter, which could affect the suggested fix. See [this FAQ section](https://docs.astral.sh/ruff/faq/#how-does-ruff-determine-which-of-my-imports-are-first-party-third-party-etc) for more details.
90-
9190
## Options
9291
- `lint.ignore-init-module-imports`
9392
- `lint.pyflakes.allowed-unused-imports`

crates/ruff/tests/snapshots/lint__output_format_sarif.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ exit_code: 1
9595
"rules": [
9696
{
9797
"fullDescription": {
98-
"text": "## What it does\nChecks for unused imports.\n\n## Why is this bad?\nUnused imports add a performance overhead at runtime, and risk creating\nimport cycles. They also increase the cognitive load of reading the code.\n\nIf an import statement is used to check for the availability or existence\nof a module, consider using `importlib.util.find_spec` instead.\n\nIf an import statement is used to re-export a symbol as part of a module's\npublic interface, consider using a \"redundant\" import alias, which\ninstructs Ruff (and other tools) to respect the re-export, and avoid\nmarking it as unused, as in:\n\n```python\nfrom module import member as member\n```\n\nAlternatively, you can use `__all__` to declare a symbol as part of the module's\ninterface, as in:\n\n```python\n# __init__.py\nimport some_module\n\n__all__ = [\"some_module\"]\n```\n\n## Fix safety\n\nFixes to remove unused imports are safe, except in `__init__.py` files.\n\nApplying fixes to `__init__.py` files is currently in preview. The fix offered depends on the\ntype of the unused import. Ruff will suggest a safe fix to export first-party imports with\neither a redundant alias or, if already present in the file, an `__all__` entry. If multiple\n`__all__` declarations are present, Ruff will not offer a fix. Ruff will suggest an unsafe fix\nto remove third-party and standard library imports -- the fix is unsafe because the module's\ninterface changes.\n\n## Example\n\n```python\nimport numpy as np # unused import\n\n\ndef area(radius):\n return 3.14 * radius**2\n```\n\nUse instead:\n\n```python\ndef area(radius):\n return 3.14 * radius**2\n```\n\nTo check the availability of a module, use `importlib.util.find_spec`:\n\n```python\nfrom importlib.util import find_spec\n\nif find_spec(\"numpy\") is not None:\n print(\"numpy is installed\")\nelse:\n print(\"numpy is not installed\")\n```\n\n## Preview\nWhen [preview](https://docs.astral.sh/ruff/preview/) is enabled,\nthe criterion for determining whether an import is first-party\nis stricter, which could affect the suggested fix. See [this FAQ section](https://docs.astral.sh/ruff/faq/#how-does-ruff-determine-which-of-my-imports-are-first-party-third-party-etc) for more details.\n\n## Options\n- `lint.ignore-init-module-imports`\n- `lint.pyflakes.allowed-unused-imports`\n\n## References\n- [Python documentation: `import`](https://docs.python.org/3/reference/simple_stmts.html#the-import-statement)\n- [Python documentation: `importlib.util.find_spec`](https://docs.python.org/3/library/importlib.html#importlib.util.find_spec)\n- [Typing documentation: interface conventions](https://typing.python.org/en/latest/spec/distributing.html#library-interface-public-and-private-symbols)\n"
98+
"text": "## What it does\nChecks for unused imports.\n\n## Why is this bad?\nUnused imports add a performance overhead at runtime, and risk creating\nimport cycles. They also increase the cognitive load of reading the code.\n\nIf an import statement is used to check for the availability or existence\nof a module, consider using `importlib.util.find_spec` instead.\n\nIf an import statement is used to re-export a symbol as part of a module's\npublic interface, consider using a \"redundant\" import alias, which\ninstructs Ruff (and other tools) to respect the re-export, and avoid\nmarking it as unused, as in:\n\n```python\nfrom module import member as member\n```\n\nAlternatively, you can use `__all__` to declare a symbol as part of the module's\ninterface, as in:\n\n```python\n# __init__.py\nimport some_module\n\n__all__ = [\"some_module\"]\n```\n\n## Fix safety\n\nFixes to remove unused imports are safe, except in `__init__.py` files.\n\nApplying fixes to `__init__.py` files is currently in preview. The fix offered depends on the\ntype of the unused import. Ruff will suggest a safe fix to export first-party imports with\neither a redundant alias or, if already present in the file, an `__all__` entry. If multiple\n`__all__` declarations are present, Ruff will not offer a fix. Ruff will suggest an unsafe fix\nto remove third-party and standard library imports -- the fix is unsafe because the module's\ninterface changes.\n\nSee [this FAQ section](https://docs.astral.sh/ruff/faq/#how-does-ruff-determine-which-of-my-imports-are-first-party-third-party-etc)\nfor more details on how Ruff\ndetermines whether an import is first or third-party.\n\n## Example\n\n```python\nimport numpy as np # unused import\n\n\ndef area(radius):\n return 3.14 * radius**2\n```\n\nUse instead:\n\n```python\ndef area(radius):\n return 3.14 * radius**2\n```\n\nTo check the availability of a module, use `importlib.util.find_spec`:\n\n```python\nfrom importlib.util import find_spec\n\nif find_spec(\"numpy\") is not None:\n print(\"numpy is installed\")\nelse:\n print(\"numpy is not installed\")\n```\n\n## Options\n- `lint.ignore-init-module-imports`\n- `lint.pyflakes.allowed-unused-imports`\n\n## References\n- [Python documentation: `import`](https://docs.python.org/3/reference/simple_stmts.html#the-import-statement)\n- [Python documentation: `importlib.util.find_spec`](https://docs.python.org/3/library/importlib.html#importlib.util.find_spec)\n- [Typing documentation: interface conventions](https://typing.python.org/en/latest/spec/distributing.html#library-interface-public-and-private-symbols)\n"
9999
},
100100
"help": {
101101
"text": "`{name}` imported but unused; consider using `importlib.util.find_spec` to test for availability"

crates/ruff_linter/src/checkers/ast/analyze/expression.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@ use ruff_text_size::Ranged;
88

99
use crate::checkers::ast::Checker;
1010
use crate::preview::{
11-
is_assert_raises_exception_call_enabled, is_optional_as_none_in_union_enabled,
12-
is_unnecessary_default_type_args_stubs_enabled,
11+
is_optional_as_none_in_union_enabled, is_unnecessary_default_type_args_stubs_enabled,
1312
};
1413
use crate::registry::Rule;
1514
use crate::rules::{
@@ -1296,9 +1295,7 @@ pub(crate) fn expression(expr: &Expr, checker: &Checker) {
12961295
if checker.is_rule_enabled(Rule::NonOctalPermissions) {
12971296
ruff::rules::non_octal_permissions(checker, call);
12981297
}
1299-
if checker.is_rule_enabled(Rule::AssertRaisesException)
1300-
&& is_assert_raises_exception_call_enabled(checker.settings())
1301-
{
1298+
if checker.is_rule_enabled(Rule::AssertRaisesException) {
13021299
flake8_bugbear::rules::assert_raises_exception_call(checker, call);
13031300
}
13041301
}

crates/ruff_linter/src/codes.rs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ pub fn code_to_rule(linter: Linter, code: &str) -> Option<(RuleGroup, Rule)> {
334334
(Flake8Async, "109") => (RuleGroup::Stable, rules::flake8_async::rules::AsyncFunctionWithTimeout),
335335
(Flake8Async, "110") => (RuleGroup::Stable, rules::flake8_async::rules::AsyncBusyWait),
336336
(Flake8Async, "115") => (RuleGroup::Stable, rules::flake8_async::rules::AsyncZeroSleep),
337-
(Flake8Async, "116") => (RuleGroup::Preview, rules::flake8_async::rules::LongSleepNotForever),
337+
(Flake8Async, "116") => (RuleGroup::Stable, rules::flake8_async::rules::LongSleepNotForever),
338338
(Flake8Async, "210") => (RuleGroup::Stable, rules::flake8_async::rules::BlockingHttpCallInAsyncFunction),
339339
(Flake8Async, "212") => (RuleGroup::Preview, rules::flake8_async::rules::BlockingHttpCallHttpxInAsyncFunction),
340340
(Flake8Async, "220") => (RuleGroup::Stable, rules::flake8_async::rules::CreateSubprocessInAsyncFunction),
@@ -563,7 +563,7 @@ pub fn code_to_rule(linter: Linter, code: &str) -> Option<(RuleGroup, Rule)> {
563563
(Pyupgrade, "035") => (RuleGroup::Stable, rules::pyupgrade::rules::DeprecatedImport),
564564
(Pyupgrade, "036") => (RuleGroup::Stable, rules::pyupgrade::rules::OutdatedVersionBlock),
565565
(Pyupgrade, "037") => (RuleGroup::Stable, rules::pyupgrade::rules::QuotedAnnotation),
566-
(Pyupgrade, "038") => (RuleGroup::Deprecated, rules::pyupgrade::rules::NonPEP604Isinstance),
566+
(Pyupgrade, "038") => (RuleGroup::Removed, rules::pyupgrade::rules::NonPEP604Isinstance),
567567
(Pyupgrade, "039") => (RuleGroup::Stable, rules::pyupgrade::rules::UnnecessaryClassParentheses),
568568
(Pyupgrade, "040") => (RuleGroup::Stable, rules::pyupgrade::rules::NonPEP695TypeAlias),
569569
(Pyupgrade, "041") => (RuleGroup::Stable, rules::pyupgrade::rules::TimeoutErrorAlias),
@@ -574,7 +574,7 @@ pub fn code_to_rule(linter: Linter, code: &str) -> Option<(RuleGroup, Rule)> {
574574
(Pyupgrade, "046") => (RuleGroup::Stable, rules::pyupgrade::rules::NonPEP695GenericClass),
575575
(Pyupgrade, "047") => (RuleGroup::Stable, rules::pyupgrade::rules::NonPEP695GenericFunction),
576576
(Pyupgrade, "049") => (RuleGroup::Stable, rules::pyupgrade::rules::PrivateTypeParameter),
577-
(Pyupgrade, "050") => (RuleGroup::Preview, rules::pyupgrade::rules::UselessClassMetaclassType),
577+
(Pyupgrade, "050") => (RuleGroup::Stable, rules::pyupgrade::rules::UselessClassMetaclassType),
578578

579579
// pydocstyle
580580
(Pydocstyle, "100") => (RuleGroup::Stable, rules::pydocstyle::rules::UndocumentedPublicModule),
@@ -773,7 +773,7 @@ pub fn code_to_rule(linter: Linter, code: &str) -> Option<(RuleGroup, Rule)> {
773773
(PandasVet, "013") => (RuleGroup::Stable, rules::pandas_vet::rules::PandasUseOfDotStack),
774774
(PandasVet, "015") => (RuleGroup::Stable, rules::pandas_vet::rules::PandasUseOfPdMerge),
775775
(PandasVet, "101") => (RuleGroup::Stable, rules::pandas_vet::rules::PandasNuniqueConstantSeriesCheck),
776-
(PandasVet, "901") => (RuleGroup::Deprecated, rules::pandas_vet::rules::PandasDfVariableName),
776+
(PandasVet, "901") => (RuleGroup::Removed, rules::pandas_vet::rules::PandasDfVariableName),
777777

778778
// flake8-errmsg
779779
(Flake8ErrMsg, "101") => (RuleGroup::Stable, rules::flake8_errmsg::rules::RawStringInException),
@@ -830,8 +830,8 @@ pub fn code_to_rule(linter: Linter, code: &str) -> Option<(RuleGroup, Rule)> {
830830
(Flake8Pyi, "056") => (RuleGroup::Stable, rules::flake8_pyi::rules::UnsupportedMethodCallOnAll),
831831
(Flake8Pyi, "058") => (RuleGroup::Stable, rules::flake8_pyi::rules::GeneratorReturnFromIterMethod),
832832
(Flake8Pyi, "057") => (RuleGroup::Stable, rules::flake8_pyi::rules::ByteStringUsage),
833-
(Flake8Pyi, "059") => (RuleGroup::Preview, rules::flake8_pyi::rules::GenericNotLastBaseClass),
834-
(Flake8Pyi, "061") => (RuleGroup::Preview, rules::flake8_pyi::rules::RedundantNoneLiteral),
833+
(Flake8Pyi, "059") => (RuleGroup::Stable, rules::flake8_pyi::rules::GenericNotLastBaseClass),
834+
(Flake8Pyi, "061") => (RuleGroup::Stable, rules::flake8_pyi::rules::RedundantNoneLiteral),
835835
(Flake8Pyi, "062") => (RuleGroup::Stable, rules::flake8_pyi::rules::DuplicateLiteralMember),
836836
(Flake8Pyi, "063") => (RuleGroup::Stable, rules::flake8_pyi::rules::Pep484StylePositionalOnlyParameter),
837837
(Flake8Pyi, "064") => (RuleGroup::Stable, rules::flake8_pyi::rules::RedundantFinalLiteral),
@@ -956,7 +956,7 @@ pub fn code_to_rule(linter: Linter, code: &str) -> Option<(RuleGroup, Rule)> {
956956
(Flake8UsePathlib, "207") => (RuleGroup::Stable, rules::flake8_use_pathlib::rules::Glob),
957957
(Flake8UsePathlib, "208") => (RuleGroup::Stable, rules::flake8_use_pathlib::violations::OsListdir),
958958
(Flake8UsePathlib, "210") => (RuleGroup::Stable, rules::flake8_use_pathlib::rules::InvalidPathlibWithSuffix),
959-
(Flake8UsePathlib, "211") => (RuleGroup::Preview, rules::flake8_use_pathlib::rules::OsSymlink),
959+
(Flake8UsePathlib, "211") => (RuleGroup::Stable, rules::flake8_use_pathlib::rules::OsSymlink),
960960

961961
// flake8-logging-format
962962
(Flake8LoggingFormat, "001") => (RuleGroup::Stable, rules::flake8_logging_format::violations::LoggingStringFormat),
@@ -1032,7 +1032,7 @@ pub fn code_to_rule(linter: Linter, code: &str) -> Option<(RuleGroup, Rule)> {
10321032
(Ruff, "039") => (RuleGroup::Preview, rules::ruff::rules::UnrawRePattern),
10331033
(Ruff, "040") => (RuleGroup::Stable, rules::ruff::rules::InvalidAssertMessageLiteralArgument),
10341034
(Ruff, "041") => (RuleGroup::Stable, rules::ruff::rules::UnnecessaryNestedLiteral),
1035-
(Ruff, "043") => (RuleGroup::Preview, rules::ruff::rules::PytestRaisesAmbiguousPattern),
1035+
(Ruff, "043") => (RuleGroup::Stable, rules::ruff::rules::PytestRaisesAmbiguousPattern),
10361036
(Ruff, "045") => (RuleGroup::Preview, rules::ruff::rules::ImplicitClassVarInDataclass),
10371037
(Ruff, "046") => (RuleGroup::Stable, rules::ruff::rules::UnnecessaryCastToInt),
10381038
(Ruff, "047") => (RuleGroup::Preview, rules::ruff::rules::NeedlessElse),
@@ -1046,7 +1046,7 @@ pub fn code_to_rule(linter: Linter, code: &str) -> Option<(RuleGroup, Rule)> {
10461046
(Ruff, "056") => (RuleGroup::Preview, rules::ruff::rules::FalsyDictGetFallback),
10471047
(Ruff, "057") => (RuleGroup::Stable, rules::ruff::rules::UnnecessaryRound),
10481048
(Ruff, "058") => (RuleGroup::Stable, rules::ruff::rules::StarmapZip),
1049-
(Ruff, "059") => (RuleGroup::Preview, rules::ruff::rules::UnusedUnpackedVariable),
1049+
(Ruff, "059") => (RuleGroup::Stable, rules::ruff::rules::UnusedUnpackedVariable),
10501050
(Ruff, "060") => (RuleGroup::Preview, rules::ruff::rules::InEmptyCollection),
10511051
(Ruff, "061") => (RuleGroup::Preview, rules::ruff::rules::LegacyFormPytestRaises),
10521052
(Ruff, "063") => (RuleGroup::Preview, rules::ruff::rules::AccessAnnotationsFromClassDict),
@@ -1106,11 +1106,11 @@ pub fn code_to_rule(linter: Linter, code: &str) -> Option<(RuleGroup, Rule)> {
11061106

11071107
// airflow
11081108
(Airflow, "001") => (RuleGroup::Stable, rules::airflow::rules::AirflowVariableNameTaskIdMismatch),
1109-
(Airflow, "002") => (RuleGroup::Preview, rules::airflow::rules::AirflowDagNoScheduleArgument),
1110-
(Airflow, "301") => (RuleGroup::Preview, rules::airflow::rules::Airflow3Removal),
1111-
(Airflow, "302") => (RuleGroup::Preview, rules::airflow::rules::Airflow3MovedToProvider),
1112-
(Airflow, "311") => (RuleGroup::Preview, rules::airflow::rules::Airflow3SuggestedUpdate),
1113-
(Airflow, "312") => (RuleGroup::Preview, rules::airflow::rules::Airflow3SuggestedToMoveToProvider),
1109+
(Airflow, "002") => (RuleGroup::Stable, rules::airflow::rules::AirflowDagNoScheduleArgument),
1110+
(Airflow, "301") => (RuleGroup::Stable, rules::airflow::rules::Airflow3Removal),
1111+
(Airflow, "302") => (RuleGroup::Stable, rules::airflow::rules::Airflow3MovedToProvider),
1112+
(Airflow, "311") => (RuleGroup::Stable, rules::airflow::rules::Airflow3SuggestedUpdate),
1113+
(Airflow, "312") => (RuleGroup::Stable, rules::airflow::rules::Airflow3SuggestedToMoveToProvider),
11141114

11151115
// perflint
11161116
(Perflint, "101") => (RuleGroup::Stable, rules::perflint::rules::UnnecessaryListCast),
@@ -1137,7 +1137,7 @@ pub fn code_to_rule(linter: Linter, code: &str) -> Option<(RuleGroup, Rule)> {
11371137
(Refurb, "105") => (RuleGroup::Stable, rules::refurb::rules::PrintEmptyString),
11381138
(Refurb, "110") => (RuleGroup::Preview, rules::refurb::rules::IfExpInsteadOfOrOperator),
11391139
(Refurb, "113") => (RuleGroup::Preview, rules::refurb::rules::RepeatedAppend),
1140-
(Refurb, "116") => (RuleGroup::Preview, rules::refurb::rules::FStringNumberFormat),
1140+
(Refurb, "116") => (RuleGroup::Stable, rules::refurb::rules::FStringNumberFormat),
11411141
(Refurb, "118") => (RuleGroup::Preview, rules::refurb::rules::ReimplementedOperator),
11421142
(Refurb, "122") => (RuleGroup::Stable, rules::refurb::rules::ForLoopWrites),
11431143
(Refurb, "129") => (RuleGroup::Stable, rules::refurb::rules::ReadlinesInFor),

0 commit comments

Comments
 (0)