* This release includes support for range formatting
(i.e., the ability to format specific lines within a source file).
* Preview features
* [refurb] Implement missing-f-string-syntax (RUF027)
* Format module-level docstrings
* Formatter
* Add --range option to ruff format
* Don't trim last empty line in docstrings
* Bug fixes
* Skip empty lines when determining base indentation
* Drop __get__ and __set__ from unnecessary-dunder-call
* Respect generic Protocol in ellipsis removal
* Revert "Use publicly available Apple Silicon runners"
* Performance
* Skip LibCST parsing for standard dedent adjustments
* Remove CST-based fixer for C408
* Add our own ignored-names abstractions
* Remove CST-based fixers for C400, C401, C410, and C418
* Use AhoCorasick to speed up quote match
* Remove CST-based fixers for C405 and C409
* Add fast-path for comment detection
* Invert order of checks in zero-sleep-call
* Short-circuit typing matches based on imports
* Run dunder method rule on methods directly
* Track top-level module imports in the semantic model
* Slight speed-up for lowercase and uppercase identifier checks
* Remove LibCST-based fixer for C403
* Documentation
* Update max-pos-args example to max-positional-args
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-ruff?expand=0&rev=38
* Breaking changes
* The NURSERY selector cannot be used anymore
* Legacy selection of nursery rules by exact codes is no longer allowed without preview enabled
* See also, the "Remapped rules" section which may result in disabled rules.
* Deprecations
* The following rules are now deprecated:
* missing-type-self (ANN101)
* missing-type-cls (ANN102)
* The following command line options are now deprecated:
* --show-source; use --output-format full instead
* --no-show-source; use --output-format concise instead
* --output-format text; use full or concise instead
* The following settings have moved and the previous name is deprecated:
* ruff.allowed-confusables → ruff.lint.allowed-confusables
* ruff.dummy-variable-rgx → ruff.lint.dummy-variable-rgx
* ruff.explicit-preview-rules → ruff.lint.explicit-preview-rules
* ruff.extend-fixable → ruff.lint.extend-fixable
* ruff.extend-ignore → ruff.lint.extend-ignore
* ruff.extend-per-file-ignores → ruff.lint.extend-per-file-ignores
* ruff.extend-safe-fixes → ruff.lint.extend-safe-fixes
* ruff.extend-select → ruff.lint.extend-select
* ruff.extend-unfixable → ruff.lint.extend-unfixable
* ruff.extend-unsafe-fixes → ruff.lint.extend-unsafe-fixes
* ruff.external → ruff.lint.external
* ruff.fixable → ruff.lint.fixable
* ruff.flake8-annotations → ruff.lint.flake8-annotations
* ruff.flake8-bandit → ruff.lint.flake8-bandit
* ruff.flake8-bugbear → ruff.lint.flake8-bugbear
* ruff.flake8-builtins → ruff.lint.flake8-builtins
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-ruff?expand=0&rev=36
* Preview features
* [flake8-bugbear] Add fix for duplicate-value (B033)
* [flake8-simplify] Implement enumerate-for-loop (SIM113)
* [pygrep_hooks] Add fix for deprecated-log-warn (PGH002)
* [pylint] Implement import-private-name (C2701)
* [refurb] Implement regex-flag-alias with fix (FURB167)
* [ruff] Add rule and fix to sort contents of __all__ (RUF022)
* [tryceratops] Add fix for error-instead-of-exception (TRY400)
* Rule changes
* [flake8-pyi] Fix PYI047 false negatives on PEP-695 type aliases
* [flake8-pyi] Fix PYI049 false negatives on call-based TypedDicts
* [pylint] Exclude self and cls when counting method arguments (PLR0917)
* CLI
* --show-settings displays active settings in a far more readable format
* Add --extension support to the formatter
* Configuration
* Ignore preview status for fixable and unfixable selectors
* [pycodestyle] Use the configured tab size when expanding indents
* Bug fixes
* Recursively visit deferred AST nodes
* Visit deferred lambdas before type definitions
* [flake8-simplify] Avoid some more enumerate-for-loop false positives (SIM113)
* [pandas-vet] Limit inplace diagnostics to methods that accept inplace
* [pylint] Add the __prepare__ method to the list of recognized dunder method
* [pylint] Ignore unnecessary dunder calls within dunder definitions
* [refurb] Avoid bailing when reimplemented-operator is called on function (FURB118)
* [ruff] Avoid treating named expressions as static keys (RUF011)
* Documentation
* Add instructions on using noqa with isort rules
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-ruff?expand=0&rev=32
* Bug fixes
* Include base pyproject when initializing cache settings
* [flake8-simplify] Account for possibly-empty f-string values in truthiness logic
* [pylint] Add the missing period in unnecessary-dunder-call
* [pylint] Fix __aenter__ message in unnecessary-dunder-call
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-ruff?expand=0&rev=30
* [pylint] Implement super-without-brackets (W0245)
* Check path string properly in python -m ruff invocations
* Documentation
* Tweak relative-imports message
* Add fix safety note for yield-in-for-loop
* 0.1.10
* Preview features
* Improve dummy_implementations preview style formatting
* Normalise Hex and unicode escape sequences in strings
* Parenthesize long type annotations in annotated assignments
* Parenthesize multi-context managers in with statements
* [flake8-pyi] Implement generator-return-from-iter-method (PYI058)
* [pylint] Implement empty-comment (PLR2044)
* [refurb] Implement bit-count (FURB161)
* [ruff] Add never-union rule to detect redundant typing.NoReturn and typing.Never
* CLI
* Add paths to TOML parse errors
* Add row and column numbers to formatter parse errors
* Improve responsiveness when invoked via Python
* Short rule messages should not end with a period
* Configuration
* Respect runtime-required decorators on functions
* Bug fixes
* Avoid asyncio-dangling-task for nonlocal and global bindings
* Escape trailing placeholders in rule documentation
* Fix continuation detection following multi-line strings
* Fix scoping for generators in named expressions in classes
* Port from obsolete wsl crate to is-wsl
* Remove special pre-visit for module docstrings
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-ruff?expand=0&rev=26
* Breaking changes
* Add site-packages to default exclusions
* Preview features
* Fix: Avoid parenthesizing subscript targets and values
* [pylint] Implement too-many-locals (PLR0914)
* Implement reimplemented_operator (FURB118)
* Add a rule to detect string members in runtime-evaluated unions
* Implement no_blank_line_before_class_docstring preview style
* Rule changes
* CONSTANT_CASE variables are improperly flagged for yoda violation (SIM300)
* [flake8-pyi] Cover ParamSpecs and TypeVarTuples (PYI018)
* [flake8-bugbear] Add fix for zip-without-explicit-strict (B905)
* Add fix to automatically remove print and pprint statements (T201, T203)
* Prefer Never to NoReturn in auto-typing in Python >= 3.11 (ANN201)
* Formatter
* can_omit_optional_parentheses: Exit early for unparenthesized expressions
* Fix dynamic mode with doctests so that it doesn't exceed configured line width
* Fix can_omit_optional_parentheses for expressions with a right most fstring
* Add target_version to formatter options
* CLI
* Update ruff format --check to display message for already formatted files
* Bug fixes
* Reverse order of arguments for operator.contains
* Iterate over lambdas in deferred type annotations
* Fix panic in D208 with multibyte indent
* Add support for NoReturn in auto-return-typing
* Allow removal of typing from exempt-modules
* Avoid mutable-class-default violations for Pydantic subclasses
* Fix dropped union expressions for piped non-types in PYI055 autofix
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-ruff?expand=0&rev=24
* Preview features
* Implement multiline dictionary and list hugging for preview style
* Implement the fix_power_op_line_length preview style
* Use Python version to determine typing rewrite safety
* [flake8-annotations] Enable auto-return-type involving Optional and Union annotations
* [flake8-bandit] Implement django-raw-sql (S611)
* [flake8-bandit] Implement tarfile-unsafe-members (S202)
* [flake8-pyi] Implement fix for unnecessary-literal-union (PYI030)
* [flake8-simplify] Extend dict-get-with-none-default (SIM910) to non-literals
* [pylint] - add unnecessary-list-index-lookup (PLR1736) + autofix
* [pylint] - implement R0202 and R0203 with autofixes
* [pylint] Implement repeated-keyword (PLe1132)
* [pylint] Implement too-many-positional (PLR0917)
* [pylint] Implement unnecessary-dict-index-lookup (PLR1733)
* [refurb] Implement redundant-log-base (FURB163)
* Rule changes
* [flake8-boolean-trap] Allow booleans in @override methods
* [flake8-bugbear] Avoid B015,B018 for last expression in a cell
* [flake8-pie] Allow ellipses for enum values in stub files
* [flake8-pyi] Check PEP 695 type aliases for snake-case-type-alias and t-suffixed-type-alias
* [flake8-pyi] Check for kwarg and vararg NoReturn type annotations
* [flake8-simplify] Omit select context managers from SIM117
* [pep8-naming] Allow Django model loads in non-lowercase-variable-in-function (N806)
* [pycodestyle] Avoid E703 for last expression in a cell
* [pycodestyle] Update E402 to work at cell level for notebooks
* [pydocstyle] Avoid D100 for Jupyter Notebooks
* [pylint] Implement fix for unspecified-encoding (PLW1514)
* Formatter
* Avoid unstable formatting in ellipsis-only body with trailing comment
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-ruff?expand=0&rev=20
* Preview features
* [flake8-bandit] Implement mako-templates (S702)
* [flake8-trio] Implement TRIO105
* [flake8-trio] Implement TRIO109
* [flake8-trio] Implement TRIO110
* [flake8-trio] Implement TRIO115
* [refurb] Implement type-none-comparison (FURB169)
* Flag all comparisons against builtin types in E721
* Make SIM118 fix as safe when the expression is a known dictionary
* Formatter
* Fix multiline lambda expression statement formatting
* CLI
* Add hidden --extension to override inference of source type from file extension
* Configuration
* Account for selector specificity when merging extend_unsafe_fixes and override extend_safe_fixes
* Add support for disabling cache with RUFF_NO_CACHE environment variable
* Bug fixes
* [E721] Flag comparisons to memoryview
* Allow collapsed-ellipsis bodies in other statements
* Avoid D301 autofix for u prefixed strings
* Only flag flake8-trio rules when trio import is present
* Reject more syntactically invalid Python programs
* Avoid raising TRIO115 violations for trio.sleep(...) calls with non-number values
* Fix F841 false negative on assignment to multiple variables
* Documentation
* Fix link to isort known-first-party
* Add notes on fix safety to a few rules
* Add missing toml config tabs
* Add instructions for configuration of Emacs
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-ruff?expand=0&rev=16
* Preview features
* [flake8-trio] Implement timeout-without-await (TRIO001)
* [numpy] Implement NumPy 2.0 migration rule (NPY200)
* [pylint] Implement bad-open-mode (W1501)
* [pylint] Implement import-outside-toplevel (C0415) rule
* [pylint] Implement useless-with-lock (W2101)
* [pyupgrade] Implement timeout-error-alias (UP041)
* [refurb] Implement isinstance-type-none (FURB168)
* Detect confusable Unicode-to-Unicode units in RUF001, RUF002, and RUF003
* Add newline after module docstrings in preview style
* Formatter
* Add a note on line-too-long to the formatter docs
* Preserve trailing statement semicolons when using fmt: skip
* Preserve trailing semicolons when using fmt: off
* Avoid duplicating linter-formatter compatibility warnings
* Avoid inserting a newline after function docstrings
* Insert newline between docstring and following own line comment
* Split tuples in return positions by comma first
* Avoid treating byte strings as docstrings
* Add --line-length option to format command
* Avoid parenthesizing unsplittable because of comments
* CLI
* Add --output-format to ruff rule and ruff linter
* Bug fixes
* Respect --force-exclude in lint.exclude and format.exclude
* Respect --extend-per-file-ignores on the CLI
* Extend bad-dunder-method-name to permit __index__
* Fix panic with 8 in octal escape
* Avoid raising D300 when both triple quote styles are present
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-ruff?expand=0&rev=14
* Formatter
* Avoid space around pow for None, True and False
* Avoid sorting all paths in the format command
* Insert necessary blank line between class and leading comments
* Avoid introducing new parentheses in annotated assignments
* Refine the warnings about incompatible linter options
* Add test and basic implementation for formatter preview mode
* Refine warning about incompatible isort settings
* Only omit optional parentheses for starting or ending with parentheses
* Use source type to determine parser mode for formatting
* Don't warn about magic trailing comma when isort.force-single-line is true
* Use SourceKind::diff for formatter
* Fix fmt:off with trailing child comment
* Formatter parentheses support for IpyEscapeCommand
* Linter
* [pylint] Add buffer methods to bad-dunder-method-name (PLW3201) exclusions
* Match rule prefixes from external codes setting in unused-noqa
* Use line-length setting for isort in lieu of pycodestyle.max-line-length
* Update fix for unnecessary-paren-on-raise-exception to unsafe for unknown types
* Correct quick fix message for W605
* Documentation
* Fix typo in max-doc-length documentation
* Improve documentation around linter-formatter conflicts
* Fix link to error suppression documentation in unused-noqa
* Add external option to unused-noqa documentation
* Add title attribute to icons
* Clarify unsafe case in RSE102
* Fix skipping formatting examples
* docs: fix name of magic-trailing-comma option in README
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-ruff?expand=0&rev=12
* This release includes the Beta version of the Ruff formatter — an extremely
fast, Black-compatible Python formatter
* Preview features
* [pylint] Implement non-ascii-module-import (C2403)
* [pylint] implement non-ascii-name (C2401)
* [pylint] Implement unnecessary-lambda (W0108)
* [refurb] Implement read-whole-file (FURB101)
* Add fix for E223, E224, and E242
* Add fix for E225, E226, E227, and E228
* Add fix for E252
* Add fix for E261
* Add fix for E273 and E274
* Add fix for E275
* Update SIM401 to catch ternary operations
* Update E721 to allow is and is not for direct type comparisons
* Rule changes
* Add backports.strenum to deprecated-imports
* Update SIM112 to ignore https_proxy, http_proxy, and no_proxy
* Update fix for literal-membership (PLR6201) to be unsafe
* Update fix for mutable-argument-defaults (B006) to be unsafe
* Formatter
* Change line-ending default to auto
* Respect parenthesized generators in has_own_parentheses
* Add caching to formatter
* Remove --line-length option from format command
* Add formatter to line-length documentation
* Warn about incompatible formatter options
* Fix range of unparenthesized tuple subject in match statement
* Remove experimental formatter warning
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-ruff?expand=0&rev=9
* Rule changes
* Add unsafe fix for escape-sequence-in-docstring (D301)
* Configuration
* Respect #(deprecated) attribute in configuration options
* Add [format|lint].exclude options
* Respect tab-size setting in formatter
* Add lint.preview
* Preview features
* [pylint] Implement literal-membership (PLR6201)
* [pylint] Implement too-many-boolean-expressions (PLR0916)
* [pylint] Implement misplaced-bare-raise (E0704)
* [pylint] Implement global-at-module-level (W0604)
* [pylint] Implement unspecified-encoding (PLW1514)
* Add fix for triple-single-quotes (D300)
* Formatter
* New code style badge for ruff format
* Fix comments outside expression parentheses
* Add --target-version to ruff format
* Skip over parentheses when detecting in keyword
* Add --diff option to ruff format
* Insert newline after nested function or class statements
* Use pass over ellipsis in non-function/class contexts
* Bug fixes
* Lazily evaluate all PEP 695 type alias values
* Avoid failed assertion when showing fixes from stdin
* Avoid flagging HTTP and HTTPS literals in urllib-open
* Avoid flagging bad-dunder-method-name for _
* Remove Python 2-only methods from URLOpen audit
* Use set bracket replacement for iteration-over-set to preserve whitespace and comments
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-ruff?expand=0&rev=7
* Breaking changes
+ Unsafe fixes are no longer displayed or applied without opt-in
+ Drop formatting specific rules from the default set
+ The deprecated format setting has been removed
+ The format setting cannot be used to configure the output format, use output-format instead
+ The RUFF_FORMAT environment variable is ignored, use RUFF_OUTPUT_FORMAT instead
+ The --format option has been removed from ruff check, use --output-format instead
* Rule changes
+ Extend reimplemented-starmap (FURB140) to catch calls with a single and starred argument
+ Improve cases covered by RUF015
+ Update SIM15 to allow open followed by close
+ Respect msgspec.Struct default-copy semantics in RUF012
+ Add sqlalchemy methods to `flake8-boolean-trap`` exclusion list
+ Add fix for PLR1714
+ Add fix for PIE804
+ Add fix for PLC0208
+ Add fix for PYI055
+ Update non-pep695-type-alias to require --unsafe-fixes outside of stub files
+ Improve fix message for UP018
+ Update PLW3201 to support Enum sunder names
* Preview features
+ Only show warnings for empty preview selectors when enabling rules
+ Add unnecessary-key-check to simplify key in dct and dct[key] to dct.get(key)
+ Add assignment-in-assert to prevent walrus expressions in assert statements
+ [refurb] Add single-item-membership-test (FURB171)
+ [pylint] Add and-or-ternary (R1706)
+ New rules are added in preview.
* Configuration
+ Add unsafe-fixes setting
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-ruff?expand=0&rev=5