[pylint] Implement swap-with-temporary-variable (PLR1712)#22205
[pylint] Implement swap-with-temporary-variable (PLR1712)#22205ntBre merged 1 commit intoastral-sh:mainfrom
pylint] Implement swap-with-temporary-variable (PLR1712)#22205Conversation
ntBre
left a comment
There was a problem hiding this comment.
Thank you! This looks good to me overall, just a few comments.
crates/ruff_linter/src/rules/pylint/rules/consider_swap_variables.rs
Outdated
Show resolved
Hide resolved
crates/ruff_linter/src/rules/pylint/rules/consider_swap_variables.rs
Outdated
Show resolved
Hide resolved
crates/ruff_linter/src/rules/pylint/rules/consider_swap_variables.rs
Outdated
Show resolved
Hide resolved
crates/ruff_linter/src/rules/pylint/rules/consider_swap_variables.rs
Outdated
Show resolved
Hide resolved
crates/ruff_linter/src/rules/pylint/rules/consider_swap_variables.rs
Outdated
Show resolved
Hide resolved
crates/ruff_linter/src/rules/pylint/rules/consider_swap_variables.rs
Outdated
Show resolved
Hide resolved
crates/ruff_linter/src/rules/pylint/rules/consider_swap_variables.rs
Outdated
Show resolved
Hide resolved
crates/ruff_linter/src/rules/pylint/rules/consider_swap_variables.rs
Outdated
Show resolved
Hide resolved
crates/ruff_linter/src/rules/pylint/rules/consider_swap_variables.rs
Outdated
Show resolved
Hide resolved
crates/ruff_linter/src/rules/pylint/rules/consider_swap_variables.rs
Outdated
Show resolved
Hide resolved
|
| code | total | + violation | - violation | + fix | - fix |
|---|---|---|---|---|---|
| UP045 | 5895 | 0 | 5895 | 0 | 0 |
| FA102 | 3016 | 0 | 3016 | 0 | 0 |
| UP006 | 2226 | 0 | 2226 | 0 | 0 |
| C408 | 1469 | 0 | 1469 | 0 | 0 |
| ANN001 | 1374 | 0 | 1374 | 0 | 0 |
| UP037 | 1130 | 0 | 1130 | 0 | 0 |
| UP007 | 905 | 0 | 905 | 0 | 0 |
| COM812 | 835 | 0 | 835 | 0 | 0 |
| ANN201 | 815 | 0 | 815 | 0 | 0 |
| UP035 | 814 | 0 | 814 | 0 | 0 |
| RUF100 | 677 | 0 | 677 | 0 | 0 |
| FA100 | 547 | 0 | 547 | 0 | 0 |
| RET504 | 480 | 0 | 480 | 0 | 0 |
| PLR6301 | 462 | 0 | 462 | 0 | 0 |
| B008 | 446 | 0 | 446 | 0 | 0 |
| BLE001 | 374 | 0 | 374 | 0 | 0 |
| panic: | 370 | 370 | 0 | 0 | 0 |
| DOC201 | 370 | 0 | 370 | 0 | 0 |
| D212 | 369 | 0 | 369 | 0 | 0 |
| SIM117 | 314 | 0 | 314 | 0 | 0 |
| ERA001 | 300 | 0 | 300 | 0 | 0 |
| ANN202 | 256 | 0 | 256 | 0 | 0 |
| RUF012 | 223 | 0 | 223 | 0 | 0 |
| D102 | 209 | 0 | 209 | 0 | 0 |
| TRY003 | 199 | 0 | 199 | 0 | 0 |
| PLC0415 | 196 | 0 | 196 | 0 | 0 |
| SIM102 | 191 | 0 | 191 | 0 | 0 |
| E265 | 180 | 0 | 180 | 0 | 0 |
| RUF059 | 179 | 0 | 179 | 0 | 0 |
| D103 | 163 | 0 | 163 | 0 | 0 |
| ARG002 | 161 | 0 | 161 | 0 | 0 |
| Q000 | 161 | 0 | 161 | 0 | 0 |
| CPY001 | 138 | 0 | 138 | 0 | 0 |
| RUF067 | 137 | 0 | 137 | 0 | 0 |
| ANN401 | 132 | 0 | 132 | 0 | 0 |
| TRY002 | 129 | 0 | 129 | 0 | 0 |
| TRY300 | 127 | 0 | 127 | 0 | 0 |
| I001 | 125 | 0 | 125 | 0 | 0 |
| PERF401 | 116 | 0 | 116 | 0 | 0 |
| S101 | 112 | 0 | 112 | 0 | 0 |
| DTZ001 | 110 | 0 | 110 | 0 | 0 |
| PLR0917 | 107 | 0 | 107 | 0 | 0 |
| D205 | 104 | 0 | 104 | 0 | 0 |
| EM102 | 103 | 0 | 103 | 0 | 0 |
| EM101 | 99 | 0 | 99 | 0 | 0 |
| T201 | 99 | 0 | 99 | 0 | 0 |
| AIR311 | 98 | 0 | 98 | 0 | 0 |
| DOC501 | 97 | 0 | 97 | 0 | 0 |
| E501 | 93 | 0 | 93 | 0 | 0 |
| RUF022 | 89 | 0 | 89 | 0 | 0 |
| E302 | 89 | 0 | 89 | 0 | 0 |
| PLR0402 | 87 | 0 | 87 | 0 | 0 |
| FBT001 | 86 | 0 | 86 | 0 | 0 |
| E402 | 85 | 13 | 72 | 0 | 0 |
| PTH118 | 82 | 0 | 82 | 0 | 0 |
| C419 | 81 | 0 | 81 | 0 | 0 |
| TRY004 | 74 | 0 | 74 | 0 | 0 |
| SLF001 | 73 | 0 | 73 | 0 | 0 |
| ANN204 | 73 | 0 | 73 | 0 | 0 |
| PYI036 | 73 | 0 | 73 | 0 | 0 |
| PLR6201 | 71 | 0 | 71 | 0 | 0 |
| TRY201 | 70 | 0 | 70 | 0 | 0 |
| D100 | 70 | 0 | 70 | 0 | 0 |
| PLR0913 | 69 | 0 | 69 | 0 | 0 |
| SIM118 | 69 | 0 | 69 | 0 | 0 |
| FBT002 | 67 | 0 | 67 | 0 | 0 |
| ANN003 | 66 | 0 | 66 | 0 | 0 |
| FIX002 | 64 | 0 | 64 | 0 | 0 |
| AIR001 | 64 | 0 | 64 | 0 | 0 |
| RUF015 | 64 | 0 | 64 | 0 | 0 |
| TD002 | 63 | 0 | 63 | 0 | 0 |
| TD003 | 63 | 0 | 63 | 0 | 0 |
| D101 | 62 | 0 | 62 | 0 | 0 |
| D401 | 62 | 0 | 62 | 0 | 0 |
| D107 | 61 | 0 | 61 | 0 | 0 |
| FLY002 | 61 | 0 | 61 | 0 | 0 |
| SIM115 | 60 | 0 | 60 | 0 | 0 |
| D210 | 58 | 0 | 58 | 0 | 0 |
| TID252 | 58 | 0 | 58 | 0 | 0 |
| PYI063 | 56 | 0 | 56 | 0 | 0 |
| ARG003 | 53 | 0 | 53 | 0 | 0 |
| B018 | 53 | 0 | 53 | 0 | 0 |
| LOG015 | 51 | 0 | 51 | 0 | 0 |
| D415 | 49 | 0 | 49 | 0 | 0 |
| B006 | 49 | 0 | 49 | 0 | 0 |
| PLR2004 | 48 | 0 | 48 | 0 | 0 |
| D400 | 48 | 0 | 48 | 0 | 0 |
| PIE790 | 46 | 0 | 46 | 0 | 0 |
| RUF010 | 45 | 0 | 45 | 0 | 0 |
| ARG001 | 44 | 0 | 44 | 0 | 0 |
| Q002 | 43 | 0 | 43 | 0 | 0 |
| S110 | 43 | 0 | 43 | 0 | 0 |
| C901 | 42 | 0 | 42 | 0 | 0 |
| RET505 | 42 | 0 | 42 | 0 | 0 |
| PYI034 | 42 | 0 | 42 | 0 | 0 |
| D300 | 41 | 0 | 41 | 0 | 0 |
| SIM103 | 40 | 0 | 40 | 0 | 0 |
| PLR1714 | 38 | 0 | 38 | 0 | 0 |
| TC003 | 36 | 0 | 36 | 0 | 0 |
| D105 | 34 | 0 | 34 | 0 | 0 |
| SIM114 | 34 | 0 | 34 | 0 | 0 |
| B009 | 34 | 0 | 34 | 0 | 0 |
| G201 | 34 | 0 | 34 | 0 | 0 |
| B010 | 33 | 0 | 33 | 0 | 0 |
| RUF013 | 33 | 0 | 33 | 0 | 0 |
| RET501 | 32 | 0 | 32 | 0 | 0 |
| D200 | 32 | 0 | 32 | 0 | 0 |
| DTZ005 | 31 | 0 | 31 | 0 | 0 |
| B904 | 30 | 0 | 30 | 0 | 0 |
| PLR1704 | 30 | 0 | 30 | 0 | 0 |
| INP001 | 29 | 0 | 29 | 0 | 0 |
| PTH123 | 29 | 0 | 29 | 0 | 0 |
| C401 | 28 | 0 | 28 | 0 | 0 |
| PLR6104 | 28 | 0 | 28 | 0 | 0 |
| PLC2701 | 27 | 0 | 27 | 0 | 0 |
| RUF052 | 27 | 0 | 27 | 0 | 0 |
| PYI032 | 27 | 0 | 27 | 0 | 0 |
| C402 | 27 | 0 | 27 | 0 | 0 |
| PLR0912 | 26 | 0 | 26 | 0 | 0 |
| E261 | 26 | 0 | 26 | 0 | 0 |
| PERF402 | 26 | 0 | 26 | 0 | 0 |
| PIE804 | 26 | 0 | 26 | 0 | 0 |
| RUF036 | 25 | 0 | 25 | 0 | 0 |
| A002 | 24 | 0 | 24 | 0 | 0 |
| PYI041 | 23 | 0 | 23 | 0 | 0 |
| PLC0414 | 23 | 0 | 23 | 0 | 0 |
| PTH120 | 22 | 0 | 22 | 0 | 0 |
| PLW0603 | 22 | 0 | 22 | 0 | 0 |
| S106 | 21 | 0 | 21 | 0 | 0 |
| TC006 | 21 | 0 | 21 | 0 | 0 |
| E305 | 21 | 0 | 21 | 0 | 0 |
| UP032 | 21 | 0 | 21 | 0 | 0 |
| PT007 | 20 | 0 | 20 | 0 | 0 |
| PLR0904 | 19 | 0 | 19 | 0 | 0 |
| PLW1508 | 19 | 0 | 19 | 0 | 0 |
| PLW1510 | 19 | 0 | 19 | 0 | 0 |
| B015 | 19 | 0 | 19 | 0 | 0 |
| UP012 | 19 | 0 | 19 | 0 | 0 |
| UP030 | 19 | 0 | 19 | 0 | 0 |
| E241 | 18 | 0 | 18 | 0 | 0 |
| E251 | 18 | 0 | 18 | 0 | 0 |
| PLR1711 | 18 | 0 | 18 | 0 | 0 |
| PT031 | 18 | 0 | 18 | 0 | 0 |
| C403 | 18 | 0 | 18 | 0 | 0 |
| D404 | 17 | 0 | 17 | 0 | 0 |
| FURB118 | 17 | 0 | 17 | 0 | 0 |
| PLW1514 | 17 | 0 | 17 | 0 | 0 |
| D202 | 17 | 0 | 17 | 0 | 0 |
| D419 | 17 | 0 | 17 | 0 | 0 |
| PT014 | 17 | 0 | 17 | 0 | 0 |
| C405 | 17 | 0 | 17 | 0 | 0 |
| PIE807 | 17 | 0 | 17 | 0 | 0 |
| PYI055 | 17 | 0 | 17 | 0 | 0 |
| RUF031 | 16 | 0 | 16 | 0 | 0 |
| SIM108 | 16 | 0 | 16 | 0 | 0 |
| PGH003 | 16 | 0 | 16 | 0 | 0 |
| N815 | 16 | 0 | 16 | 0 | 0 |
| TC002 | 16 | 0 | 16 | 0 | 0 |
| C413 | 16 | 0 | 16 | 0 | 0 |
| S102 | 16 | 0 | 16 | 0 | 0 |
| PLR0914 | 15 | 0 | 15 | 0 | 0 |
| PTH100 | 15 | 0 | 15 | 0 | 0 |
| ANN205 | 15 | 0 | 15 | 0 | 0 |
| PYI016 | 15 | 0 | 15 | 0 | 0 |
| PYI066 | 15 | 0 | 15 | 0 | 0 |
| F403 | 14 | 14 | 0 | 0 | 0 |
| FBT003 | 14 | 0 | 14 | 0 | 0 |
| PLR0915 | 14 | 0 | 14 | 0 | 0 |
| PLR1702 | 14 | 0 | 14 | 0 | 0 |
| DOC402 | 14 | 0 | 14 | 0 | 0 |
| TRY400 | 14 | 0 | 14 | 0 | 0 |
| PLW0602 | 14 | 0 | 14 | 0 | 0 |
| PYI019 | 14 | 0 | 14 | 0 | 0 |
| ANN002 | 13 | 0 | 13 | 0 | 0 |
| AIR321 | 13 | 0 | 13 | 0 | 0 |
| D209 | 13 | 0 | 13 | 0 | 0 |
| PIE808 | 13 | 0 | 13 | 0 | 0 |
| PLW3201 | 13 | 0 | 13 | 0 | 0 |
| UP004 | 13 | 0 | 13 | 0 | 0 |
| ISC004 | 12 | 0 | 12 | 0 | 0 |
| D204 | 12 | 0 | 12 | 0 | 0 |
| C417 | 11 | 0 | 11 | 0 | 0 |
| TD004 | 11 | 0 | 11 | 0 | 0 |
| PLC1901 | 11 | 0 | 11 | 0 | 0 |
| PYI059 | 11 | 0 | 11 | 0 | 0 |
| PIE810 | 11 | 0 | 11 | 0 | 0 |
| PERF102 | 11 | 0 | 11 | 0 | 0 |
| TRY401 | 10 | 0 | 10 | 0 | 0 |
| RSE102 | 10 | 0 | 10 | 0 | 0 |
| SIM201 | 10 | 0 | 10 | 0 | 0 |
| FURB101 | 10 | 0 | 10 | 0 | 0 |
| UP031 | 10 | 0 | 10 | 0 | 0 |
| PLC0208 | 10 | 0 | 10 | 0 | 0 |
| B017 | 10 | 0 | 10 | 0 | 0 |
| UP009 | 10 | 0 | 10 | 0 | 0 |
| E266 | 10 | 0 | 10 | 0 | 0 |
| PLR0911 | 9 | 0 | 9 | 0 | 0 |
| RUF069 | 9 | 0 | 9 | 0 | 0 |
| PTH110 | 9 | 0 | 9 | 0 | 0 |
| UP034 | 9 | 0 | 9 | 0 | 0 |
| SIM101 | 9 | 0 | 9 | 0 | 0 |
| C414 | 9 | 0 | 9 | 0 | 0 |
| E712 | 8 | 8 | 0 | 0 | 0 |
| FIX004 | 8 | 0 | 8 | 0 | 0 |
| TD006 | 8 | 0 | 8 | 0 | 0 |
| N806 | 8 | 0 | 8 | 0 | 0 |
| S108 | 8 | 0 | 8 | 0 | 0 |
| PLC2801 | 8 | 0 | 8 | 0 | 0 |
| PT019 | 8 | 0 | 8 | 0 | 0 |
| RET503 | 8 | 0 | 8 | 0 | 0 |
| PIE800 | 8 | 0 | 8 | 0 | 0 |
| TRY203 | 8 | 0 | 8 | 0 | 0 |
| PLR0133 | 8 | 0 | 8 | 0 | 0 |
| PTH103 | 8 | 0 | 8 | 0 | 0 |
| ANN206 | 7 | 0 | 7 | 0 | 0 |
| C416 | 7 | 0 | 7 | 0 | 0 |
| PTH119 | 7 | 0 | 7 | 0 | 0 |
| TC001 | 7 | 0 | 7 | 0 | 0 |
| RUF065 | 7 | 0 | 7 | 0 | 0 |
| B023 | 7 | 0 | 7 | 0 | 0 |
| PLR1722 | 7 | 0 | 7 | 0 | 0 |
| PLC0206 | 7 | 0 | 7 | 0 | 0 |
| UP024 | 7 | 0 | 7 | 0 | 0 |
| C400 | 7 | 0 | 7 | 0 | 0 |
| B026 | 7 | 0 | 7 | 0 | 0 |
| FURB177 | 7 | 0 | 7 | 0 | 0 |
| G202 | 7 | 0 | 7 | 0 | 0 |
| LOG014 | 7 | 0 | 7 | 0 | 0 |
| EXE001 | 6 | 0 | 6 | 0 | 0 |
| S105 | 6 | 0 | 6 | 0 | 0 |
| S404 | 6 | 0 | 6 | 0 | 0 |
| ARG004 | 6 | 0 | 6 | 0 | 0 |
| RUF043 | 6 | 0 | 6 | 0 | 0 |
| FURB189 | 6 | 0 | 6 | 0 | 0 |
| E221 | 6 | 0 | 6 | 0 | 0 |
| E201 | 6 | 0 | 6 | 0 | 0 |
| E202 | 6 | 0 | 6 | 0 | 0 |
| A001 | 6 | 0 | 6 | 0 | 0 |
| PLW0127 | 6 | 0 | 6 | 0 | 0 |
| PLR2044 | 6 | 0 | 6 | 0 | 0 |
| PLW0120 | 6 | 0 | 6 | 0 | 0 |
| RUF018 | 6 | 0 | 6 | 0 | 0 |
| RUF023 | 6 | 0 | 6 | 0 | 0 |
| FURB167 | 5 | 0 | 5 | 0 | 0 |
| PLR5501 | 5 | 0 | 5 | 0 | 0 |
| FURB110 | 5 | 0 | 5 | 0 | 0 |
| S403 | 5 | 0 | 5 | 0 | 0 |
| ARG005 | 5 | 0 | 5 | 0 | 0 |
| PGH004 | 5 | 0 | 5 | 0 | 0 |
| E226 | 5 | 0 | 5 | 0 | 0 |
| PERF403 | 5 | 0 | 5 | 0 | 0 |
| UP036 | 5 | 0 | 5 | 0 | 0 |
| PLR1733 | 5 | 0 | 5 | 0 | 0 |
| TC004 | 5 | 0 | 5 | 0 | 0 |
| PLR0124 | 5 | 0 | 5 | 0 | 0 |
| SIM905 | 5 | 0 | 5 | 0 | 0 |
| RUF001 | 5 | 0 | 5 | 0 | 0 |
| FURB103 | 5 | 0 | 5 | 0 | 0 |
| PLR0916 | 5 | 0 | 5 | 0 | 0 |
| FURB140 | 4 | 0 | 4 | 0 | 0 |
| PERF203 | 4 | 0 | 4 | 0 | 0 |
| RUF027 | 4 | 0 | 4 | 0 | 0 |
| PTH107 | 4 | 0 | 4 | 0 | 0 |
| TD005 | 4 | 0 | 4 | 0 | 0 |
| D413 | 4 | 0 | 4 | 0 | 0 |
| DOC202 | 4 | 0 | 4 | 0 | 0 |
| PYI030 | 4 | 0 | 4 | 0 | 0 |
| D208 | 4 | 0 | 4 | 0 | 0 |
| S603 | 4 | 0 | 4 | 0 | 0 |
| FURB188 | 4 | 0 | 4 | 0 | 0 |
| SIM113 | 4 | 0 | 4 | 0 | 0 |
| SIM210 | 4 | 0 | 4 | 0 | 0 |
| RUF029 | 4 | 0 | 4 | 0 | 0 |
| RUF003 | 4 | 0 | 4 | 0 | 0 |
| DTZ007 | 4 | 0 | 4 | 0 | 0 |
| FURB136 | 4 | 0 | 4 | 0 | 0 |
| DTZ011 | 4 | 0 | 4 | 0 | 0 |
| PTH124 | 4 | 0 | 4 | 0 | 0 |
| S607 | 4 | 0 | 4 | 0 | 0 |
| PTH207 | 4 | 0 | 4 | 0 | 0 |
| TRY301 | 3 | 0 | 3 | 0 | 0 |
| PLR1730 | 3 | 0 | 3 | 0 | 0 |
| PTH111 | 3 | 0 | 3 | 0 | 0 |
| FURB154 | 3 | 0 | 3 | 0 | 0 |
| FURB142 | 3 | 0 | 3 | 0 | 0 |
| FURB113 | 3 | 0 | 3 | 0 | 0 |
| B905 | 3 | 0 | 3 | 0 | 0 |
| FURB129 | 3 | 0 | 3 | 0 | 0 |
| S608 | 3 | 0 | 3 | 0 | 0 |
| TD001 | 3 | 0 | 3 | 0 | 0 |
| N802 | 3 | 0 | 3 | 0 | 0 |
| S113 | 3 | 0 | 3 | 0 | 0 |
| D418 | 3 | 0 | 3 | 0 | 0 |
| PLW2901 | 3 | 0 | 3 | 0 | 0 |
| D417 | 3 | 0 | 3 | 0 | 0 |
| B007 | 3 | 0 | 3 | 0 | 0 |
| RET506 | 3 | 0 | 3 | 0 | 0 |
| PYI061 | 3 | 0 | 3 | 0 | 0 |
| PLE0704 | 3 | 0 | 3 | 0 | 0 |
| LOG009 | 3 | 0 | 3 | 0 | 0 |
| TC005 | 3 | 0 | 3 | 0 | 0 |
| B020 | 3 | 0 | 3 | 0 | 0 |
| SIM211 | 3 | 0 | 3 | 0 | 0 |
| B033 | 3 | 0 | 3 | 0 | 0 |
| N999 | 3 | 0 | 3 | 0 | 0 |
| PT018 | 3 | 0 | 3 | 0 | 0 |
| PIE796 | 2 | 0 | 2 | 0 | 0 |
| RUF021 | 2 | 0 | 2 | 0 | 0 |
| PTH117 | 2 | 0 | 2 | 0 | 0 |
| PYI024 | 2 | 0 | 2 | 0 | 0 |
| DTZ901 | 2 | 0 | 2 | 0 | 0 |
| PTH208 | 2 | 0 | 2 | 0 | 0 |
| PLR1736 | 2 | 0 | 2 | 0 | 0 |
| SIM910 | 2 | 0 | 2 | 0 | 0 |
| D104 | 2 | 0 | 2 | 0 | 0 |
| RUF002 | 2 | 0 | 2 | 0 | 0 |
| SIM105 | 2 | 0 | 2 | 0 | 0 |
| PD011 | 2 | 0 | 2 | 0 | 0 |
| DOC102 | 2 | 0 | 2 | 0 | 0 |
| D412 | 2 | 0 | 2 | 0 | 0 |
| FIX003 | 2 | 0 | 2 | 0 | 0 |
| S314 | 2 | 0 | 2 | 0 | 0 |
| ICN001 | 2 | 0 | 2 | 0 | 0 |
| N813 | 2 | 0 | 2 | 0 | 0 |
| S405 | 2 | 0 | 2 | 0 | 0 |
| EXE002 | 2 | 0 | 2 | 0 | 0 |
| DTZ004 | 2 | 0 | 2 | 0 | 0 |
| PLE1205 | 2 | 0 | 2 | 0 | 0 |
| DOC502 | 2 | 0 | 2 | 0 | 0 |
| F541 | 2 | 0 | 2 | 0 | 0 |
| PLW0128 | 2 | 0 | 2 | 0 | 0 |
| PIE794 | 2 | 0 | 2 | 0 | 0 |
| YTT103 | 2 | 0 | 2 | 0 | 0 |
| UP010 | 2 | 0 | 2 | 0 | 0 |
| PLC0205 | 2 | 0 | 2 | 0 | 0 |
| UP028 | 2 | 0 | 2 | 0 | 0 |
| PLC0105 | 2 | 0 | 2 | 0 | 0 |
| SIM223 | 2 | 0 | 2 | 0 | 0 |
| PYI025 | 2 | 0 | 2 | 0 | 0 |
| UP018 | 2 | 0 | 2 | 0 | 0 |
| FURB105 | 2 | 0 | 2 | 0 | 0 |
| LOG004 | 2 | 0 | 2 | 0 | 0 |
| PTH108 | 2 | 0 | 2 | 0 | 0 |
| PTH116 | 2 | 0 | 2 | 0 | 0 |
| PTH113 | 2 | 0 | 2 | 0 | 0 |
| FURB157 | 1 | 0 | 1 | 0 | 0 |
| N817 | 1 | 0 | 1 | 0 | 0 |
| N805 | 1 | 0 | 1 | 0 | 0 |
| AIR002 | 1 | 0 | 1 | 0 | 0 |
| N803 | 1 | 0 | 1 | 0 | 0 |
| SIM401 | 1 | 0 | 1 | 0 | 0 |
| FURB171 | 1 | 0 | 1 | 0 | 0 |
| PTH106 | 1 | 0 | 1 | 0 | 0 |
| FIX001 | 1 | 0 | 1 | 0 | 0 |
| S301 | 1 | 0 | 1 | 0 | 0 |
| SIM110 | 1 | 0 | 1 | 0 | 0 |
| RUF005 | 1 | 0 | 1 | 0 | 0 |
| S104 | 1 | 0 | 1 | 0 | 0 |
| F401 | 1 | 0 | 1 | 0 | 0 |
| NPY002 | 1 | 0 | 1 | 0 | 0 |
| E225 | 1 | 0 | 1 | 0 | 0 |
| Q001 | 1 | 0 | 1 | 0 | 0 |
| N812 | 1 | 0 | 1 | 0 | 0 |
| E303 | 1 | 0 | 1 | 0 | 0 |
| RET508 | 1 | 0 | 1 | 0 | 0 |
| E301 | 1 | 0 | 1 | 0 | 0 |
| E227 | 1 | 0 | 1 | 0 | 0 |
| PTH109 | 1 | 0 | 1 | 0 | 0 |
| ISC003 | 1 | 0 | 1 | 0 | 0 |
| E203 | 1 | 0 | 1 | 0 | 0 |
| FURB148 | 1 | 0 | 1 | 0 | 0 |
| PLW1509 | 1 | 0 | 1 | 0 | 0 |
| PLW0133 | 1 | 0 | 1 | 0 | 0 |
| PLW0211 | 1 | 0 | 1 | 0 | 0 |
| PYI013 | 1 | 0 | 1 | 0 | 0 |
| B903 | 1 | 0 | 1 | 0 | 0 |
| UP014 | 1 | 0 | 1 | 0 | 0 |
| RUF007 | 1 | 0 | 1 | 0 | 0 |
| S112 | 1 | 0 | 1 | 0 | 0 |
| B012 | 1 | 0 | 1 | 0 | 0 |
| PLW0642 | 1 | 0 | 1 | 0 | 0 |
| B013 | 1 | 0 | 1 | 0 | 0 |
| YTT301 | 1 | 0 | 1 | 0 | 0 |
| DTZ006 | 1 | 0 | 1 | 0 | 0 |
| B039 | 1 | 0 | 1 | 0 | 0 |
| UP011 | 1 | 0 | 1 | 0 | 0 |
| FURB163 | 1 | 0 | 1 | 0 | 0 |
| PLW0129 | 1 | 0 | 1 | 0 | 0 |
| B030 | 1 | 0 | 1 | 0 | 0 |
| RUF051 | 1 | 0 | 1 | 0 | 0 |
| LOG001 | 1 | 0 | 1 | 0 | 0 |
| DTZ002 | 1 | 0 | 1 | 0 | 0 |
| RUF019 | 1 | 0 | 1 | 0 | 0 |
| DTZ003 | 1 | 0 | 1 | 0 | 0 |
| PYI044 | 1 | 0 | 1 | 0 | 0 |
| FURB122 | 1 | 0 | 1 | 0 | 0 |
| PYI006 | 1 | 0 | 1 | 0 | 0 |
| S324 | 1 | 0 | 1 | 0 | 0 |
| S606 | 1 | 0 | 1 | 0 | 0 |
| PTH211 | 1 | 0 | 1 | 0 | 0 |
| S311 | 1 | 0 | 1 | 0 | 0 |
| PTH122 | 1 | 0 | 1 | 0 | 0 |
| PTH202 | 1 | 0 | 1 | 0 | 0 |
| D106 | 1 | 0 | 1 | 0 | 0 |
| D403 | 1 | 0 | 1 | 0 | 0 |
| RUF056 | 1 | 0 | 1 | 0 | 0 |
| B901 | 1 | 0 | 1 | 0 | 0 |
| PYI045 | 1 | 0 | 1 | 0 | 0 |
| S402 | 1 | 0 | 1 | 0 | 0 |
9f0567d to
6edd032
Compare
|
Thanks a lot for the review @ntBre! I've applied all suggestions except for the 2 unresolved ones above where I'm not quite sure yet, I'd appreciate your thoughts on that :) |
0519f49 to
7e79155
Compare
ntBre
left a comment
There was a problem hiding this comment.
Thank you again, this is looking great!
I had a couple more nits and one larger concern about removing the temporary variable, but even that shouldn't be too much trouble, I hope.
crates/ruff_linter/src/rules/pylint/rules/swap_with_temporary_variable.rs
Outdated
Show resolved
Hide resolved
crates/ruff_linter/src/rules/pylint/rules/swap_with_temporary_variable.rs
Outdated
Show resolved
Hide resolved
crates/ruff_linter/resources/test/fixtures/pylint/swap_with_temporary_variable.py
Show resolved
Hide resolved
crates/ruff_linter/src/rules/pylint/rules/swap_with_temporary_variable.rs
Outdated
Show resolved
Hide resolved
pylint]: Implement consider-swap-variables (PLR1712)pylint] Implement swap-with-temporary-variable (PLR1712)
7e79155 to
df1c532
Compare
8971c6d to
51bbda1
Compare
6a165cc to
33f02d2
Compare
crates/ruff_linter/src/rules/pylint/rules/swap_with_temporary_variable.rs
Outdated
Show resolved
Hide resolved
crates/ruff_linter/src/rules/pylint/rules/swap_with_temporary_variable.rs
Outdated
Show resolved
Hide resolved
crates/ruff_linter/resources/test/fixtures/pylint/swap_with_temporary_variable.py
Show resolved
Hide resolved
Merging this PR will not alter performance
Comparing Footnotes
|
33f02d2 to
839b712
Compare
ntBre
left a comment
There was a problem hiding this comment.
Thank you, this is looking great! I managed to come up with a few more nits and another contrived test case that we should double check the behavior of, but otherwise I think this is good to go.
...nt/snapshots/ruff_linter__rules__pylint__tests__PLR1712_swap_with_temporary_variable.py.snap
Outdated
Show resolved
Hide resolved
crates/ruff_linter/resources/test/fixtures/pylint/swap_with_temporary_variable.py
Show resolved
Hide resolved
crates/ruff_linter/src/rules/pylint/rules/swap_with_temporary_variable.rs
Outdated
Show resolved
Hide resolved
crates/ruff_linter/src/rules/pylint/rules/swap_with_temporary_variable.rs
Outdated
Show resolved
Hide resolved
crates/ruff_linter/src/rules/pylint/rules/swap_with_temporary_variable.rs
Outdated
Show resolved
Hide resolved
crates/ruff_linter/src/rules/pylint/rules/swap_with_temporary_variable.rs
Outdated
Show resolved
Hide resolved
crates/ruff_linter/src/rules/pylint/rules/swap_with_temporary_variable.rs
Outdated
Show resolved
Hide resolved
crates/ruff_linter/src/rules/pylint/rules/swap_with_temporary_variable.rs
Outdated
Show resolved
Hide resolved
crates/ruff_linter/src/rules/pylint/rules/swap_with_temporary_variable.rs
Outdated
Show resolved
Hide resolved
crates/ruff_linter/src/rules/pylint/rules/swap_with_temporary_variable.rs
Outdated
Show resolved
Hide resolved
839b712 to
d022c96
Compare
Thanks for the review, I've addressed all the suggestions. Your reviews helped me to learn more about the Python AST structure used in Ruff, so although the PR process took some time, it was definitely worth it. Thanks for all your help :) |
d022c96 to
c08dea5
Compare
ntBre
left a comment
There was a problem hiding this comment.
Thank you for all of your work here, this looks great to me!
I'll land this once the release is finished for today.
…al-sh#22205) ## Summary This PR implements the `consider-swap-variables` rule from pylint. Basically it tries to find code parts that swap two variables with each other using a temporary variable. Example code: ```py temp = x x = y y = temp ``` can be simplified to ```py x, y = y, x ``` related: - https://pylint.readthedocs.io/en/latest/user_guide/messages/refactor/consider-swap-variables.html - astral-sh#970 <!-- What's the purpose of the change? What does it do, and why? --> ## Test Plan I've added new snapshots tests. PS: Since this is my first contribution here and I'm not too familiar with the codebase, suggestions are very welcome! The implementation might also not be 100% memory-optimized yet, since we use `clone` a few times.
Summary -- The huge number of changes in #22205 (comment) should have obviously been a red flag, but I think it would be nice if CI failed when new ecosystem panics were introduced. This PR adds a check for diagnostic lines that start with `panic: Panicked at crates/`, raises a `ToolError` if any are found in the results from the comparison executable, and then also exits non-zero if any errors are returned. If exiting non-zero is going too far, we could also just raise the `ToolError`, as that will at least trigger this message, which was not the case on the PLR1712 PR: https://github.com/astral-sh/ruff/blob/f14edd8661e2803254f89265548c7487f47a09f6/python/ruff-ecosystem/ruff_ecosystem/check.py#L103-L106 Another option would be not to exit zero if Ruff panics, even if `--exit-zero` is used, but I saw that ty has the same behavior and assumed that that was intentional. Test Plan -- Local testing on the 0.15.3 tag showing that ruff-ecosystem exited non-zero. I can also introduce a panic into a lint rule to test this in CI
Summary -- The huge number of changes in #22205 (comment) should have obviously been a red flag, but I think it would be nice if CI failed when new ecosystem panics were introduced. This PR adds a check for diagnostic lines that start with `panic: Panicked at crates/`, raises a `ToolError` if any are found in the results from the comparison executable, and then ~~also exits non-zero if any errors are returned~~ fails the CI run if the corresponding error message was printed. After trying this out in CI, I opted not to change the script's exit code itself because that suppressed the ecosystem comment. It feels a little hackier this way but preserves the behavior I wanted of both failing CI and still getting the ecosystem comment to help with debugging. Test Plan -- Local testing on the 0.15.3 tag showing that ruff-ecosystem exited non-zero and some manual testing in CI, as you can see below.
Summary
This PR implements the
consider-swap-variablesrule from pylint. Basically it tries to find code parts that swap two variables with each other using a temporary variable.Example code:
can be simplified to
related:
Test Plan
I've added new snapshots tests.
PS: Since this is my first contribution here and I'm not too familiar with the codebase, suggestions are very welcome! The implementation might also not be 100% memory-optimized yet, since we use
clonea few times.