ruff 0.17.2
- Source
- https://github.com/astral-sh/ruff
- Artifact scanned
ruff-0.17.2.tar.gz- Compared with
ruff-0.17.1.tar.gz(1 signals introduced since)- Files
- 3423 scanned, 1695 skipped (binary, oversized, or unrecognised)
- Signals
- 0 critical · 0 warn · 105 info
- Scan time
- 20.2 s
- LLM review
- Reviewed by claude-haiku-5-5 (Anthropic): 17 of 17 warn and critical signals; 17 demoted to info.
- Disclude version
- 4.3.0
- Scanned (UTC)
- 2026-10-23 17:13
Signals
Ordered by severity, then signals introduced in this release. Hidden characters are shown as ⟨U+…⟩.
-
# For a specific version. |likely benign README documents a version-pinned curl-to-sh and PowerShell ruff installer.Reasoning
Same official README install section, this time pinned to a specific ruff version, with a PowerShell counterpart. Pinning and the project's own domain make it a legitimate install instruction.
-
# On macOS and Linux. | # On Windows.likely benign README documents installing ruff via a curl-to-sh installer.Reasoning
This is the official ruff install instruction in the project README, piping the vendor's install script to sh. The pattern is risky in general, but in project docs for the project's own installer it is an ordinary, expected install method.
-
warn_user_once!; } -
-
info
whitespace-anomalycrates/ruff_annotate_snippets/tests/color/multiline_removal_suggestion.rs:2:1use ; -
| ___________^ 4 | | 5 | | ] | |_^ annotation -
| ___________^ 4 | | 5 | | ] | |_^ annotation -
│ ┏━━━━━━━━━━━┛ 4 │ ┃ 5 │ ┃ ] ╰╴┗━┛ annotation -
│ ┏━━━━━━━━━━━┛ 4 │ ┃ 5 │ ┃ ] ╰╴┗━┛ annotation -
��|�\u!5�cc\u\u�Ӻi��WWj�ȥ�'�}�\u�J�ȉ��W�\uO�@����\uw�V���LO����\u -
| 1 | �|�␂!5�cc␕␂�Ӻi��WWj�ȥ�'�}�␒�J�ȉ��W�␞O�@����␜w�V���LO����␔ -
│ 1 │ �|�␂!5�cc␕␂�Ӻi��WWj�ȥ�'�}�␒�J�ȉ��W�␞O�@����␜w�V���LO����␔ -
-
info
warn→ info by reviewwhitespace-anomalycrates/ruff_annotate_snippets/tests/rustc_tests.rs:4533:3let s = c"foo\ ⟨U+00A0⟩ bar "; //~^^^ WARNING whitespace symbol '\u{a0}' is not skippedlikely benign Deliberate non-breaking space inside a rustc-compatibility test string.Reasoning
The NBSP sits inside a test string literal whose comment expects the warning 'whitespace symbol \u{a0} is not skipped'. The character is deliberate test input for whitespace handling.
-
Args: ⟨U+00A0⟩ ⟨U+00A0⟩ Returns: """ "#;likely benign Non-breaking space in indented raw-string content in the linter crate.Reasoning
The NBSP appears in an indented docstring/raw string in a Rust source file of a Python linter. Such characters commonly appear in test or doc fixtures and do not execute or hide logic.
-
-
/// /// let locator = Locator::new("α"); /// /// assert_eq!( -
&LinterSettings -
unresolved_target_version: PY313.into, allowed_confusables: from_iter, ..for_rules -
unresolved_target_version: PY314.into, allowed_confusables: from_iter, ..for_rules -
preview: Enabled, allowed_confusables: from_iter, ..for_rules -
/// ```python /// print("Ηello, world!") # "Η" is the Greek eta (`U+0397`). /// ``` /// -
info
unicode-mixed-scriptcrates/ruff_linter/src/rules/ruff/rules/ambiguous_unicode_character.rs:37:12/// ```python /// print("Ηello, world!") # "Η" is the Greek eta (`U+0397`). /// ``` /// -
/// ```python /// print("Ηello, world!") # "Η" is the Greek eta (`U+0397`). /// ``` /// -
info
unicode-homoglyphcrates/ruff_linter/src/rules/ruff/rules/ambiguous_unicode_character.rs:145:14/// ```python /// foo() # nоqa # "о" is Cyrillic (`U+043E`) /// ``` /// -
info
unicode-mixed-scriptcrates/ruff_linter/src/rules/ruff/rules/ambiguous_unicode_character.rs:145:14/// ```python /// foo() # nоqa # "о" is Cyrillic (`U+043E`) /// ``` /// -
info
unicode-homoglyphcrates/ruff_linter/src/rules/ruff/rules/ambiguous_unicode_character.rs:145:24/// ```python /// foo() # nоqa # "о" is Cyrillic (`U+043E`) /// ``` /// -
-
use -
-
x =likely benign NBSP within an embedded Python sample used by stylist tests.Reasoning
The line is part of a Python code sample embedded in a Rust test string for the stylist's indentation and newline detection. The NBSP is a test input for whitespace handling.
-
⟨U+00A0⟩1, ⟨U+00A0⟩2, ⟨U+00A0⟩3, )likely benign NBSP within an embedded Python sample used by stylist tests.Reasoning
Continuation of the same embedded Python test sample for stylist whitespace detection; the NBSP is test data, not runtime logic.
-
⟨U+00A0⟩2, ⟨U+00A0⟩3, ) ";likely benign NBSP within an embedded Python sample used by stylist tests.Reasoning
Continuation of the same embedded Python test sample in stylist.rs; the whitespace anomaly is intentional test input.
-
info
whitespace-anomalycrates/ruff_python_formatter/resources/test/fixtures/black/cases/docstring.py:2:1""" Multiline class docstring """ -
info
identifier-low-lengthcrates/ruff_python_formatter/resources/test/fixtures/black/cases/generics_wrapping.py:1:1 -
info
identifier-low-lengthcrates/ruff_python_formatter/resources/test/fixtures/black/cases/import_comments.py:1:1 -
info
identifier-low-lengthcrates/ruff_python_formatter/resources/test/fixtures/black/cases/pep_570.py:1:1 -
info
identifier-low-lengthcrates/ruff_python_formatter/resources/test/fixtures/black/cases/pep_572_py310.py:1:1 -
info
identifier-low-lengthcrates/ruff_python_formatter/resources/test/fixtures/black/cases/pep_646.py:1:1 -
info
identifier-low-lengthcrates/ruff_python_formatter/resources/test/fixtures/black/cases/percent_precedence.py:1:1 -
info
identifier-low-lengthcrates/ruff_python_formatter/resources/test/fixtures/black/cases/power_op_spacing_long.py:1:1 -
info
warn→ info by reviewnarrow-file-charsetcrates/ruff_python_formatter/resources/test/fixtures/black/cases/power_op_spacing_long.py:1:1= 1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1 = 1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1 = 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1likely benign Formatter test fixture of repeated exponentiation expressions.Reasoning
The file is a formatter fixture for power-operator spacing, made of repeated 1**1 expressions. The small character set reflects the arithmetic under test, not an obfuscated payload.
-
info
high-complexitycrates/ruff_python_formatter/resources/test/fixtures/black/cases/preview_long_strings.py:311:12 -
info
warn→ info by reviewhigh-complexitycrates/ruff_python_formatter/resources/test/fixtures/black/cases/preview_long_strings__east_asian_width.py:5:10= =likely benign Korean and Chinese string literals in a formatter width test.Reasoning
The strings are ordinary Korean and Chinese text used to test line-width handling in a formatter fixture. Compression ratio on natural-language text is not a sign of obfuscation.
-
info
critical→ info by reviewdynamic-executioncrates/ruff_python_formatter/resources/test/fixtures/black/cases/preview_long_strings__regression.py:20:9likely benign os.system call with a .format argument inside a formatter test fixture.Reasoning
This is a formatter regression fixture from black's test suite. The os.system call is parsed as source text for formatting and is never executed, and the argument is a literal string with .format applied.
-
info
high-complexitycrates/ruff_python_formatter/resources/test/fixtures/black/cases/preview_long_strings__regression.py:235:17= f = f -
info
warn→ info by reviewunicode-invisiblecrates/ruff_python_formatter/resources/test/fixtures/black/cases/tricky_unicode_symbols.py:4:2= 3 x⟨U+E0100⟩ = 4 មុ = 1 Q̇_per_meter = 4likely benign Formatter fixture with a variation selector deliberately placed in a Python identifier.Reasoning
This is black's tricky-unicode-symbols fixture, which deliberately includes unusual identifier characters, including a variation selector in an identifier. The invisible character is intentional test input, though it is the kind of thing a supply-chain scanner should flag in general.
-
""" content\ """ return -
info
whitespace-anomalycrates/ruff_python_formatter/resources/test/fixtures/ruff/docstring_code_examples.py:12:1""" Do cool stuff. -
info
whitespace-anomalycrates/ruff_python_formatter/resources/test/fixtures/ruff/docstring_tab_indentation.py:7:1""" Arguments: arg1: super duper arg with 2 tabs in front -
info
identifier-low-lengthcrates/ruff_python_formatter/resources/test/fixtures/ruff/expression/attribute.py:1:1 -
info
whitespace-anomalycrates/ruff_python_formatter/resources/test/fixtures/ruff/expression/lambda.py:27:1# Trailing -
info
warn→ info by reviewdynamic-executioncrates/ruff_python_formatter/resources/test/fixtures/ruff/expression/lambda.py:845:5likely benign Formatter fixture containing a subprocess shell=True call with lambda-built arguments.Reasoning
This is a ruff formatter fixture testing lambda formatting. The shell=True call is never executed, and the interpolated command is only source text to format.
-
info
warn→ info by reviewdynamic-executioncrates/ruff_python_formatter/resources/test/fixtures/ruff/expression/lambda.py:858:5# Regression test for https://github.com/astral-sh/ruff/issues/25397likely benign Formatter fixture containing another subprocess shell=True call with nested lambdas.Reasoning
Another lambda-formatting test case from the same ruff fixture file, with the same shell=True pattern used as parseable source, not as code that runs.
-
info
identifier-low-lengthcrates/ruff_python_formatter/resources/test/fixtures/ruff/expression/nested_string_quote_style.py:1:1 -
info
identifier-low-lengthcrates/ruff_python_formatter/resources/test/fixtures/ruff/expression/tstring.py:1:1 -
= -
info
whitespace-anomalycrates/ruff_python_formatter/resources/test/fixtures/ruff/expression/unary.py:2:1pass = True -
info
whitespace-anomalycrates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/mixed_space_and_tab.py:2:1# fmt: off -
info
identifier-low-lengthcrates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/off_on_off_on.py:1:1 -
info
whitespace-anomalycrates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_skip/compound_one_liners.py:15:1# fmt: skip # Multiple statements in body (should not apply - multiline) -
info
identifier-low-lengthcrates/ruff_python_formatter/resources/test/fixtures/ruff/parentheses/nested.py:1:1 -
info
identifier-low-lengthcrates/ruff_python_formatter/resources/test/fixtures/ruff/statement/delete.py:1:1 -
info
whitespace-anomalycrates/ruff_python_formatter/resources/test/fixtures/ruff/statement/match.py:3:1: # dangling match comment : pass -
info
whitespace-anomalycrates/ruff_python_formatter/resources/test/fixtures/ruff/statement/type_alias.py:42:1\ = \ = -
info
identifier-low-lengthcrates/ruff_python_parser/resources/inline/err/different_match_pattern_bindings.py:1:1 -
info
identifier-low-lengthcrates/ruff_python_parser/resources/inline/err/duplicate_type_parameter_names.py:1:1 -
info
identifier-low-lengthcrates/ruff_python_parser/resources/inline/err/invalid_annotation_function.py:1:1 -
info
unicode-mixed-scriptcrates/ruff_python_parser/resources/inline/err/invalid_byte_literal.py:1:6b rb b -
info
unicode-mixed-scriptcrates/ruff_python_parser/resources/inline/err/invalid_byte_literal.py:2:4b rb b -
info
unicode-mixed-scriptcrates/ruff_python_parser/resources/inline/err/invalid_byte_literal.py:3:8rb b -
info
identifier-low-lengthcrates/ruff_python_parser/resources/inline/ok/ambiguous_lpar_with_items_binary_expr.py:1:1 -
info
identifier-low-lengthcrates/ruff_python_parser/resources/inline/ok/non_duplicate_type_parameter_names.py:1:1 -
\ = \ = -
-
// test_err invalid_byte_literal // b'123a𝐁c' // rb"a𝐁c123" // b"""123a𝐁c""" -
// b'123a𝐁c' // rb"a𝐁c123" // b"""123a𝐁c""" Bytes -
// rb"a𝐁c123" // b"""123a𝐁c""" Bytes -
\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\likely benign A Rust string literal enumerating byte values as \xNN escapes, likely in parser test data.Reasoning
This is a byte-escape test table, a sequence of all byte values 0x00 to 0x7f and beyond inside a Rust string literal in a Python parser's test or fixture code. Consecutive hex escapes are expected for this purpose and it is not obfuscation.
-
NOPQRSTUVWXYZ^_`abcdefghijklmnopqrstuvwxyz~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xlikely benign Continuation of the exhaustive byte-escape table in the ruff parser's string handling code.Reasoning
Same byte-enumeration test table in the ruff Python parser source; the long escape run is an exhaustive byte-value table used to exercise string escape handling, consistent with a legitimate parser test.
-
\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\likely benign A second byte-value escape enumeration in the same Rust parser test code.Reasoning
Duplicate of the same exhaustive byte-value test table in the ruff parser's string.rs, a sequential enumeration of all byte values used for testing escape handling rather than any hidden payload.
-
NOPQRSTUVWXYZ^_`abcdefghijklmnopqrstuvwxyz~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xlikely benign Continuation of the second byte-value enumeration in the ruff parser string code.Reasoning
Same exhaustive sequential byte table continuing in the parser source; the monotonically increasing values are a test fixture, not encoded or executed data.
-
-
assert!; assert!; assert!; assert!; -
/// assert!(is_lowercase("_")); /// assert!(is_lowercase("αbc")); /// assert!(!is_lowercase("αBC")); /// assert!(!is_lowercase("Ωbc")); -
/// assert!(is_lowercase("_")); /// assert!(is_lowercase("αbc")); /// assert!(!is_lowercase("αBC")); /// assert!(!is_lowercase("Ωbc")); -
/// assert!(is_lowercase("αbc")); /// assert!(!is_lowercase("αBC")); /// assert!(!is_lowercase("Ωbc")); /// ``` -
/// assert!(is_lowercase("αbc")); /// assert!(!is_lowercase("αBC")); /// assert!(!is_lowercase("Ωbc")); /// ``` -
/// assert!(!is_lowercase("αBC")); /// assert!(!is_lowercase("Ωbc")); /// ``` -
/// assert!(is_uppercase("_")); /// assert!(is_uppercase("ΩBC")); /// assert!(!is_uppercase("Ωbc")); /// assert!(!is_uppercase("αBC")); -
/// assert!(is_uppercase("ΩBC")); /// assert!(!is_uppercase("Ωbc")); /// assert!(!is_uppercase("αBC")); /// ``` -
/// assert!(!is_uppercase("Ωbc")); /// assert!(!is_uppercase("αBC")); /// ``` -
/// assert!(!is_uppercase("Ωbc")); /// assert!(!is_uppercase("αBC")); /// ``` -
# which could be confused for "-", "p", and "*", respectively. allowed-confusables = "# )]
Reproduce This Scan
Run disclude locally to verify. These commands scan the published file; the "new in this release" marks come from comparing it with the previous release's file, which they don't repeat. Add --format sarif for SARIF output. Add --llm (with an API key in the environment) to include the LLM review.
|
&&