Releases: charliermarsh/ruff
v0.0.271
What's Changed
Rules
- Add autofix for flake8-type-checking by @charliermarsh in #4742
- [
airflow] Add AIR001: task variable name should be same as task_id arg by @jlaneve in #4687 - [
flake8-bandit] Implement S609, linux_commands_wildcard_injection by @scop in #4504 - [
flake8-bugbear] Move duplicate-value rule to flake8-bugbear by @charliermarsh in #4882 - [
flake8-fixme] Implementflake8_fixmeand refactorTodoDirectiveby @evanrittenhouse in #4681 - [
flake8-future-annotations] ImplementFA102by @akx in #4702 - [
flake8-pyi] Add PYI024 forflake8-pyiplugin by @qdegraaf in #4756 - [
flake8-pyi] Add PYI034 forflake8-pyiplugin by @qdegraaf in #4764 - [
flake8-pyi] AddPYI032rule with autofix by @qdegraaf in #4695 - [
flake8-pyi] Add autofix for PYI010 by @qdegraaf in #4634 - [
flake8-pyi] Implement PYI029 by @density in #4851 - [
flake8-pyi] Implement PYI035 by @density in #4820 - [
flake8-pyi] Implement PYI048 forflake8-pyiplugin by @qdegraaf in #4645 - [
flake8-pyi] Implement PYI053 by @density in #4770 - [
flake8-pyi] Implement PYI054 by @density in #4775 - [
flake8-pyi] ImplementPYI025by @qdegraaf in #4791 - [
flake8-pyi] ImplementPYI045by @density in #4700 - [
pylint] Add Pylint ruleC0208(use-sequence-for-iteration) asPLC0208(iteration-over-set) by @tjkuson in #4706 - [
pylint] Add autofix forPLR1701(repeated-isinstance-calls) by @dhruvmanila in #4792 - [
pylint] Implement Pylint'syield-inside-async-functionrule (PLE1700) by @chanman3388 in #4668 - [
pylint] implement E307 for pylint invalid str return type by @Ryang20718 in #4854 - [
ruff] Lint pyproject.toml by @konstin in #4496 - [
tryceratops] Ignore error calls withexc_infoin TRY400 by @charliermarsh in #4797
Settings
- Add
pyflakes.extend-genericssetting by @JonathanPlasse in #4677
Bug Fixes
- Fix PLW3301 false positive single argument nested min/max by @JonathanPlasse in #4683
- Handle dotted alias imports to check for implicit imports by @dhruvmanila in #4685
- Flag empty strings in flake8-errmsg rules by @charliermarsh in #4745
- Exclude function definition from too-many-statements rule by @charliermarsh in #4794
- Preserve quotes in F523 fixer by @charliermarsh in #4836
- Fix round-tripping of nested functions by @charliermarsh in #4875
- Avoid early-exit in explicit-f-string-type-conversion by @charliermarsh in #4886
- Avoid no-op fix for nested with expressions by @charliermarsh in #4906
- Fix UP036 auto-fix error by @JonathanPlasse in #4679
- Use class name as range for
B024by @charliermarsh in #4647 - Change TODO directive detection to work with multiple pound signs on the same line by @evanrittenhouse in #4558
- Allow more immutable funcs for RUF009 by @qdegraaf in #4660
- Avoid using typing-imported symbols for runtime edits by @charliermarsh in #4649
- Fix
async forformatting by @charliermarsh in #4675 - Ignore setattr in FBT003 by @alexfikl in #4752
- Include ImportError in non-fixable try-catch imports by @charliermarsh in #4793
- Avoid extra newline between diagnostics in grouped mode by @charliermarsh in #4776
- Avoid enforcing native-literals rule within nested f-strings by @charliermarsh in #4488
- Respect mixed variable assignment in RET504 by @charliermarsh in #4835
- Make FLY002 autofix into a constant string instead of an f-string if all
join()arguments are strings by @evanrittenhouse in #4834 - Add some exceptions for FBT003 (#3247) by @allisonkarlitskaya in #4867
- Avoid running RUF100 rules when code contains syntax errors by @charliermarsh in #4869
- Avoid index-out-of-bands panic for positional placeholders by @charliermarsh in #4872
- Remove destructive fixes for F523 by @charliermarsh in #4883
- Respect shadowed exports in
__all__by @charliermarsh in #4885 - Track symbol deletions separately from bindings by @charliermarsh in #4888
- Change fixable_set to include RuleSelector::All/Nursery by @evanrittenhouse in #4852
New Contributors
- @bersbersbers made their first contribution in #4644
- @jlaneve made their first contribution in #4690
- @suharnikov made their first contribution in #4678
- @alexfikl made their first contribution in #4752
- @allisonkarlitskaya made their first contribution in #4867
- @Ryang20718 made their first contribution in #4854
- @addisoncrump made their first contribution in #4893
Full Changelog: v0.0.270...v0.0.271
v0.0.270
What's Changed
Rules
- [
flake8-bandit] Implementparamiko-call(S601) by @scop in #4500 - [
flake8-pyi] Add autofix for PYI009 by @qdegraaf in #4583 - [
flake8-pyi] ImplementPYI013by @density in #4517 - [
pylint] Addduplicate-value(W0130) by @hoel-bagard in #4515 - [
pylint] Addnamed_expr_without_context(W0131) by @hoel-bagard in #4531 - [
ruff] ExtendRUF005to recursive and literal-literal concatenations by @hoel-bagard in #4557 - [
ruff] Make ambiguous-unicode detection sensitive to 'word' context by @charliermarsh in #4552 - [
ruff] Name ambiguous characters by @covracer in #4448
Settings
- Implement
--extend-fixableoption by @charliermarsh in #4297 - Support new
extend-per-file-ignoressetting by @aacunningham in #4265
Bug Fixes
- Fix RUF010 auto-fix with parenthesis by @JonathanPlasse in #4524
- Parenthesize more sub-expressions in f-string conversion by @charliermarsh in #4535
- Fix false-positive for TRY302 if exception cause is given by @153957 in #4559
- Fix
# isort: splitcomment detection in nested blocks by @charliermarsh in #4584 - Avoid some false positives in dunder variable assigments by @scop in #4508
- Fix UP032 auto-fix with integers by @JonathanPlasse in #4525
- Improve reference resolution for deferred-annotations-within-classes by @charliermarsh in #4509
- Improve handling of
__qualname__,__module__, and__class__by @charliermarsh in #4512 - Include empty success test in JUnit output by @charliermarsh in #4537
- Fix SIM110 and SIM111 ranges by @JonathanPlasse in #4545
- Ignore
#regioncode folding marks in eradicate rules by @charliermarsh in #4546 - Avoid infinite loop for required imports with isort: off by @charliermarsh in #4581
- Make B007 fix relevance stricter by @charliermarsh in #4607
- Introduce
tab-sizeto correcly calculate the line length with tabulations by @JonathanPlasse in #4167 - Visit
TypeVarandNewTypename arguments by @charliermarsh in #4627 - Improve
Messagesorting performance by @MichaReiser in #4624
New Contributors
- @hoel-bagard made their first contribution in #4516
- @density made their first contribution in #4517
- @Mr-Pepe made their first contribution in #4540
- @153957 made their first contribution in #4559
- @covracer made their first contribution in #4448
Full Changelog: v0.0.269...v0.0.270
v0.0.269
What's Changed
(This is a rerelease of v0.0.268, which didn't make it to PyPI due to user error. As such, the release notes are copied below.)
pycodestyle
This release includes optimized implementations of a large portion of pycodestyle, for those that use Ruff without an autoformatter.
In this initial release, the rules are being introduced under a "nursery" flag, which requires that users explicitly select them (e.g., select = ["E111"]); in other words, these rules are not yet enabled via select = ["E"].
If you're interested in testing the pycodestyle rules, you can enable them via:
select = [
"E111", "E112", "E113", "E114", "E115", "E116", "E117",
"E201", "E202", "E203", "E211", "E221", "E222", "E223",
"E224", "E225", "E226", "E227", "E228", "E231", "E251",
"E252", "E261", "E262", "E265", "E266", "E271", "E272",
"E273", "E274", "E275",
]These rules will be included as part of the E category in a future release.
Breaking Changes
- [
pyupgrade] Removekeep-runtime-typingsetting by @charliermarsh in #4427
Rules
- [
pylint] Addduplicate-basesrule by @alonme in #4411 - [
pylint] FixPLW3301auto-fix with generators by @JonathanPlasse in #4412 - [
flake8-async] Implement flake8-async plugin by @qdegraaf in #4432 - [
pyupgrade] Enable automatic rewrites oftyping.Dequeandtyping.DefaultDictby @charliermarsh in #4420 - [
flake8-pyi] Implementunannotated-assignment-in-stub(PY052) by @sladyn98 in #4293 - [
tryceratops] Implement TRY302 -raiseafterexceptby @john-h-k in #4461 - [
flake8-bandit] Improve SQL injection detection logic (S608) by @scop in #4499 - [
flake8-todos] Implementflake8_todosby @evanrittenhouse in #3921 - [
flake8-future-annotations] Implementflake8-future-annotationsFA100 by @TylerYep in #3979 - Enable
pycodestylerules by @charliermarsh in #3689 - Enable
pycodestylerules under new "nursery" category by @charliermarsh in #4407
Settings
- Merge subsettings when extending configurations by @bendoerry in #4431
Bug Fixes
- Extend multi-line noqa directives to start-of-line by @charliermarsh in #4490
- Fix scoping of comprehensions within classes by @charliermarsh in #4494
- Enable autofix for split-assertions at top level by @charliermarsh in #4405
- Ignore ANN401 for overridden methods by @JonathanPlasse in #4409
- Fix
RUF010autofix within f-strings by @JonathanPlasse in #4423 - Update C419 to be a suggested fix by @madkinsz in #4424
- Fix expected-indentation errors with end-of-line comments by @charliermarsh in #4438
- Emit non-logical newlines for "empty" lines by @charliermarsh in #4444
- Avoid emitting empty logical lines by @charliermarsh in #4452
- Avoid flagging missing whitespace for decorators by @charliermarsh in #4454
- Remove special-casing for whitespace-around-@ by @charliermarsh in #4458
- Avoid triggering
pd#atand friends on non-subscripts by @charliermarsh in #4474 - Include precise tokens for extraneous-whitespace diagnostics by @charliermarsh in #4471
- Allow shebang comments at start-of-file by @charliermarsh in #4473
- Bring pycodestyle rules into full compatibility (on SciPy) by @charliermarsh in #4472
- Invert quote-style when generating code within f-strings by @charliermarsh in #4487
- Fix COM812 false positive in string subscript by @JonathanPlasse in #4493
- Overhaul sdist handling by @konstin in #4439
New Contributors
- @TylerYep made their first contribution in #3979
- @yanksyoon made their first contribution in #4428
- @bendoerry made their first contribution in #4431
- @qdegraaf made their first contribution in #4432
- @jameslamb made their first contribution in #4446
- @john-h-k made their first contribution in #4461
Full Changelog: v0.0.267...v0.0.269
v0.0.268
What's Changed
pycodestyle
This release includes optimized implementations of a large portion of pycodestyle, for those that use Ruff without an autoformatter.
In this initial release, the rules are being introduced under a "nursery" flag, which requires that users explicitly select them (e.g., select = ["E111"]); in other words, these rules are not yet enabled via select = ["E"].
If you're interested in testing the pycodestyle rules, you can enable them via:
select = [
"E111", "E112", "E113", "E114", "E115", "E116", "E117",
"E201", "E202", "E203", "E211", "E221", "E222", "E223",
"E224", "E225", "E226", "E227", "E228", "E231", "E251",
"E252", "E261", "E262", "E265", "E266", "E271", "E272",
"E273", "E274", "E275",
]These rules will be included as part of the E category in a future release.
Breaking Changes
- [
pyupgrade] Removekeep-runtime-typingsetting by @charliermarsh in #4427
Rules
- [
pylint] Addduplicate-basesrule by @alonme in #4411 - [
pylint] FixPLW3301auto-fix with generators by @JonathanPlasse in #4412 - [
flake8-async] Implement flake8-async plugin by @qdegraaf in #4432 - [
pyupgrade] Enable automatic rewrites oftyping.Dequeandtyping.DefaultDictby @charliermarsh in #4420 - [
flake8-pyi] Implementunannotated-assignment-in-stub(PY052) by @sladyn98 in #4293 - [
tryceratops] Implement TRY302 -raiseafterexceptby @john-h-k in #4461 - [
flake8-bandit] Improve SQL injection detection logic (S608) by @scop in #4499 - [
flake8-todos] Implementflake8_todosby @evanrittenhouse in #3921 - [
flake8-future-annotations] Implementflake8-future-annotationsFA100 by @TylerYep in #3979 - Enable
pycodestylerules by @charliermarsh in #3689 - Enable
pycodestylerules under new "nursery" category by @charliermarsh in #4407
Settings
- Merge subsettings when extending configurations by @bendoerry in #4431
Bug Fixes
- Extend multi-line noqa directives to start-of-line by @charliermarsh in #4490
- Fix scoping of comprehensions within classes by @charliermarsh in #4494
- Enable autofix for split-assertions at top level by @charliermarsh in #4405
- Ignore ANN401 for overridden methods by @JonathanPlasse in #4409
- Fix
RUF010autofix within f-strings by @JonathanPlasse in #4423 - Update C419 to be a suggested fix by @madkinsz in #4424
- Fix expected-indentation errors with end-of-line comments by @charliermarsh in #4438
- Emit non-logical newlines for "empty" lines by @charliermarsh in #4444
- Avoid emitting empty logical lines by @charliermarsh in #4452
- Avoid flagging missing whitespace for decorators by @charliermarsh in #4454
- Remove special-casing for whitespace-around-@ by @charliermarsh in #4458
- Avoid triggering
pd#atand friends on non-subscripts by @charliermarsh in #4474 - Include precise tokens for extraneous-whitespace diagnostics by @charliermarsh in #4471
- Allow shebang comments at start-of-file by @charliermarsh in #4473
- Bring pycodestyle rules into full compatibility (on SciPy) by @charliermarsh in #4472
- Invert quote-style when generating code within f-strings by @charliermarsh in #4487
- Fix COM812 false positive in string subscript by @JonathanPlasse in #4493
- Overhaul sdist handling by @konstin in #4439
New Contributors
- @TylerYep made their first contribution in #3979
- @yanksyoon made their first contribution in #4428
- @bendoerry made their first contribution in #4431
- @qdegraaf made their first contribution in #4432
- @jameslamb made their first contribution in #4446
- @john-h-k made their first contribution in #4461
Full Changelog: v0.0.267...v0.0.268
v0.0.267
Summary
Follow-up release to v0.0.266 to fix an issue with python -m ruff- and import ruff-based workflows.
(No new rules or functionality.)
What's Changed
Rules
Other Changes
New Contributors
- @OMEGARAZER made their first contribution in #3938
- @LotemAm made their first contribution in #4387
Full Changelog: v0.0.266...v0.0.267
v0.0.266
What's Changed
Breaking Changes
- Remove deprecated
update-checksetting by @charliermarsh in #4313 - JSON Emitter: Use one indexed column numbers for edits by @MichaReiser in #4007
Rules
- [
pygrep-hooks] Implement pygrep-hook's Mock-mistake diagnostic by @charliermarsh in #4366 - [
pylint] Implementnested-min-max(W3301) by @mccullocht in #4200 - [
flynt] Implement Flynt static string join transform as FLY002 by @akx in #4196 - [
pylint] Include positional- and keyword-only arguments in too-many-arguments by @charliermarsh in #4329 - [
ruff] Update confusable character mapping by @akx in #4274
Settings
- Add .git-rewrite folder to default ignored folder paths by @jleclanche in #4261
- Feat: detect changes also in configuration files by @mikeleppane in #4169
Bug Fixes
- Revert the B027 autofix logic by @aacunningham in #4310
- Consider Flask app logger as logger candidate by @dhruvmanila in #4253
- Enforce max-doc-length for multi-line docstrings by @charliermarsh in #4347
- Avoid re-using imports beyond current edit site by @charliermarsh in #4378
- Respect insertion location when importing symbols by @charliermarsh in #4258
- Fix jemalloc page size on aarch64 by @MichaReiser in #4247
- Fix replace_whitespace() tabulation to space by @JonathanPlasse in #4226
- Avoid fixing
PD002in a lambda expression by @dhruvmanila in #4286 - Avoid
D403if first char cannot be uppercased by @dhruvmanila in #4283 - Avoid panics for f-string rewrites at start-of-file by @charliermarsh in #4291
- Rewrite
not not aasbool(a)in boolean contexts by @charliermarsh in #4294 - Include static and class methods in in abstract decorator list by @charliermarsh in #4298
- Specify exact command in incorrect parentheses suggestion by @charliermarsh in #4300
- Ignore
TRY301exceptions without except handlers by @charliermarsh in #4301 - Preserve whitespace around
ListCompbrackets inC419by @dhruvmanila in #4099 - Tweak capitalization of B021 message by @charliermarsh in #4350
- Avoid debug panic with empty indent replacement by @charliermarsh in #4364
- Use target name in hardcoded-password diagnostics by @charliermarsh in #4365
- Avoid underflow in expected-special-method-signature by @charliermarsh in #4377
- Respect
__all__imports when determining definition visibility by @charliermarsh in #4357 - Ignore some methods on list in
flake8-boolean-trapby @charliermarsh in #4385 - Fix false positives in PD002 by @evanrittenhouse in #4337
- Run autofix on initial watcher pass by @charliermarsh in #4311
- Avoid SIM105 autofixes that would remove comments by @charliermarsh in #4330
- Handle
.encodecalls on parenthesized expressions by @charliermarsh in #4338 - Truncate
SyntaxErrors before newline character by @MichaReiser in #4124 - Use non-empty ranges for logical-lines diagnostics by @MichaReiser in #4133
New Contributors
- @jleclanche made their first contribution in #4261
- @aureliojargas made their first contribution in #4306
- @intgr made their first contribution in #4304
- @mikeleppane made their first contribution in #4169
- @dependabot made their first contribution in #4354
Full Changelog: v0.0.265...v0.0.266
v0.0.265
What's Changed
Breaking Changes
- Change
--fix-onlyexit semantics to mirror--fixby @charliermarsh in #4146
Rules
- [flake8-pyi] PYI020 by @arya-k in #4211
- Update B027 to support autofixing by @aacunningham in #4178
- [
flake8-pyi] ImplementPYI042andPYI043by @arya-k in #4214 - [
pylint] Implement import-self (W0406) by @chanman3388 in #4154 - Warn on PEP 604 syntax not in an annotation, but don't autofix by @wookie184 in #4170
Bug Fixes
- Fix panic in pydocstyle D214 when docstring indentation is empty by @madkinsz in #4216
- Render tabs as 4 spaces in diagnostics by @MichaReiser in #4132
- Fix era panic caused by out of bound edition by @leiserfg in #4206
- End of statement insertion should occur after newline by @dhruvmanila in #4215
- Ignore debuggerskip in unused variable checks by @charliermarsh in #4229
CLI
- Show settings path in
--show-settingsoutput by @dhruvmanila in #4199
Documentation
New Contributors
- @wookie184 made their first contribution in #4170
- @arya-k made their first contribution in #4211
Full Changelog: v0.0.264...v0.0.265
v0.0.264
What's Changed
Rules
- Autofix
EM101,EM102,EM103if possible by @dhruvmanila in #4123 - Add bugbear immutable functions as allowed in dataclasses by @mosauter in #4122
Settings
- Add support for providing command-line arguments via
argfileby @charliermarsh in #4087
Bug Fixes
- Make D410/D411 autofixes mutually exclusive by @evanrittenhouse in #4110
- Remove
pyrightcomment prefix from PYI033 checks by @evanrittenhouse in #4152 - Fix F811 false positive with match by @JonathanPlasse in #4161
- Fix
E713andE714false positives for multiple comparisons by @JonathanPlasse in #4083 - Fix B023 shadowed variables in nested functions by @MichaReiser in #4111
- Preserve star-handling special-casing for force-single-line by @charliermarsh in #4129
- Respect parent-scoping rules for
NamedExprassignments by @charliermarsh in #4145 - Fix UP032 auto-fix by @JonathanPlasse in #4165
- Allow boolean parameters for
pytest.paramby @charliermarsh in #4176
Internal
- Replace row/column based
Locationwith byte-offsets. by @MichaReiser in #3931 - perf(logical-lines): Various small perf improvements by @MichaReiser in #4022
- Use
memchrto speedup newline search on x86 by @MichaReiser in #3985 - Remove
ScopeStackin favor of child-parentScopeIdpointers by @charliermarsh in #4138
Full Changelog: v0.0.263...v0.0.264
v0.0.263
What's Changed
Rules
- [
flake8-bugbear] Addpytest.raises(Exception)support to B017 by @alanhdu in #4052 - [
flake8-import-conventions] Implement new ruleICN003to banfrom ... import ...for selected modules by @edgarrmondragon in #4040 - [
pylint] Implement PLE0302unexpected-special-method-signatureby @mccullocht in #4075 - [
pep8-naming] IgnoreN815forTypedDictfields by @JonathanPlasse in #4066
Bug Fixes
- Avoid
PYI015for valid default value without annotation by @dhruvmanila in #4043 - Avoid infinite-propagation of inline comments when force-splitting imports by @charliermarsh in #4074
- Fix SIM222 and SIM223 false positives and auto-fix by @JonathanPlasse in #4063
- Unify positional and keyword arguments when checking for missing arguments in docstring by @evanrittenhouse in #4067
- Avoid
RUF008if field annotation is immutable by @dhruvmanila in #4039 - Increment priority should be (branch-local, global) by @dhruvmanila in #4070
- Ignore
ClassVarannotation forRUF008,RUF009by @dhruvmanila in #4081 - Support --fix in watch mode by @evanrittenhouse in #4035
New Contributors
- @alanhdu made their first contribution in #4052
- @pronoym99 made their first contribution in #4055
- @Secrus made their first contribution in #4085
- @madkinsz made their first contribution in #4084
- @mccullocht made their first contribution in #4075
Full Changelog: v0.0.262...v0.0.263
v0.0.262
What's Changed
Configuration
- Allow users to extend the set of included files via
includeby @charliermarsh in #3914 - Implement isort custom sections and ordering (#2419) by @hackedd in #3900
Rules
- [
flake8-simplify] Add autofix forcontextlib.suppress(SIM105) by @leiserfg in #3915 - [
flake8-bandit] Ignore assert errors (S101) inTYPE_CHECKINGblocks by @charliermarsh in #3960 - [
flake8-comprehensions] Implementunnecessary-literal-within-dict-call(C418) by @charliermarsh in #3969 - [
ruff] Add checks for mutable defaultsdataclasses by @mosauter in #3877 - [
flake8-import-conventions] Add a rule forBannedImportAliasby @stancld in #3926 - [
flake8-pyi] Implement duplicate types in unions (PYI016) by @USER-5 in #3922 - [
flake8-bandit] Implement flake8-bandit shell injection rules by @robyoung in #3924 - [
flake8-comprehensions] RedirectPIE802toC419by @charliermarsh in #3971
Bug Fixes
- Fix unicode handling in PLE2515 by @konstin in #3898
- Avoid adding required imports to stub files by @charliermarsh in #3940
- Add 'or if cond' to
E712message by @charliermarsh in #3962 - Ignore argument assignments when enforcing
RET504by @charliermarsh in #4004 - Fix (doc-)line-too-long start location by @MichaReiser in #4006
- Ignore stub file assignments to value-requiring targets by @charliermarsh in #4030
- Allow legacy C and T selectors in JSON schema by @charliermarsh in #3889
- Ignore
PLW2901when using typing cast by @dhruvmanila in #3891 - Visit comprehension to detect group name usage/overrides by @dhruvmanila in #3887
- Ensure that tab characters aren't in multi-line strings before throwing a violation by @evanrittenhouse in #3837
- Avoid N802 violations for
@overridemethods by @charliermarsh in #3912 - Check for arguments in inner/outer call for
C414by @dhruvmanila in #3916 - Do not skip analysis if
*argspresent forF523by @dhruvmanila in #3923 - Extend SIM105 to match also 'Ellipsis only' bodies in exception handlers by @leiserfg in #3925
- Support
pyright: ignorecomments by @charliermarsh in #3941 - Tidy up some
pygrep-hooksrules by @charliermarsh in #3942 - Use identifier range for pytest rules by @charliermarsh in #3948
- Allow
typing_extensions.TypeVarassignments in.pyifiles by @charliermarsh in #3951 - Raise percent-format upgrade rule (
UP031) for hanging modulos by @charliermarsh in #3953 - Check for parenthesis in implicit str concat in
PT006by @dhruvmanila in #3955 - Do not consider nested comment as part of code by @dhruvmanila in #3984
- Preserve type annotations when fixing
E731by @dhruvmanila in #3983 - Remove autofix behavior for uncapitalized-environment-variables (
SIM112) by @charliermarsh in #3988 - Respect typing-modules when evaluating no-return functions by @charliermarsh in #4001
- Avoid short-circuiting when detecting RET rules by @charliermarsh in #4002
- Set non-empty range for indentation diagnostics by @MichaReiser in #4005
- Ignore relative imports in
banned-apirules by @charliermarsh in #4024 - Support relative imports in
banned-apienforcement by @charliermarsh in #4025 - Treat non-future function annotations as required-at-runtime by @charliermarsh in #4028
- Ignore certain flake8-pyi errors within function bodies by @charliermarsh in #4029
New Contributors
- @tjkuson made their first contribution in #3886
- @mosauter made their first contribution in #3877
- @stancld made their first contribution in #3926
- @USER-5 made their first contribution in #3922
- @robyoung made their first contribution in #3924
- @hackedd made their first contribution in #3900
- @justinchuby made their first contribution in #3982
- @mirecl made their first contribution in #4008
- @Xemnas0 made their first contribution in #4026
Full Changelog: v0.0.261...v0.0.262

