ty 0.0.91
- Source
- https://github.com/astral-sh/ty
- Artifact scanned
ty-0.0.91.tar.gz- Compared with
ty-0.0.90.tar.gz(4 signals introduced since)- Files
- 3405 scanned, 1845 skipped (binary, oversized, or unrecognised)
- Signals
- 0 critical · 0 warn · 359 info
- Scan time
- 48.6 s
- LLM review
- Reviewed by claude-haiku-5-5 (Anthropic): 30 of 30 warn and critical signals; 30 demoted to info.
- Disclude version
- 4.3.0
- Scanned (UTC)
- 2026-10-23 16:13
Signals
Ordered by severity, then signals introduced in this release. Hidden characters are shown as ⟨U+…⟩.
-
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/regression/constraint_set_ordering.md:573:1new in this release -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/type_properties/constraints.md:1412:1new in this release -
info
unicode-homoglyphruff/crates/ty_python_semantic/src/types/constraints/sequents.rs:1744:37new in this release// Given constraints `T ≤ α` and `T = β`, `β ≤ α` must also hold. If those bounds contain // other typevars, we can infer additional constraints. add_sequents_for_range; -
info
unicode-homoglyphruff/crates/ty_python_semantic/src/types/constraints/sequents.rs:1744:63new in this release// Given constraints `T ≤ α` and `T = β`, `β ≤ α` must also hold. If those bounds contain // other typevars, we can infer additional constraints. add_sequents_for_range; -
likely benign IPA phonetic symbol in a README pronunciation guide.
Reasoning
The IPA pronunciation guide for 'ty' legitimately uses the IPA long-mark and schwa-like characters; mixed script in prose is expected.
-
likely benign IPA symbol 'ɪ' in a README pronunciation guide.
Reasoning
Same IPA pronunciation notation in documentation; not an identifier with malicious intent.
-
err.to_string, "Unknown HTML comment `snpshotttt-digggggnosstic` -- possibly a typo? \ (Add to `HTML_COMMENT_ALLOWLIST` if this is a false positive)", ); -
info
whitespace-anomalyruff/crates/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-anomalyruff/crates/ruff_annotate_snippets/tests/rustc_tests.rs:4533:3let s = c"foo\ ⟨U+00A0⟩ bar "; //~^^^ WARNING whitespace symbol '\u{a0}' is not skippedlikely benign Test fixture deliberately containing a non-breaking space to test whitespace handling.Reasoning
The comment explicitly documents that U+00A0 is a whitespace symbol being tested for non-skipping behavior; it is a deliberate test fixture.
-
-
use -
-
x =likely benign Test string containing non-breaking space in a stylist indentation test.Reasoning
Stylist tests for indentation detection in a Rust source file; the NBSP appears in a test string fixture for whitespace/indent handling, consistent with ruff's test suite.
-
⟨U+00A0⟩1, ⟨U+00A0⟩2, ⟨U+00A0⟩3, )likely benign Test string with non-breaking space in stylist test fixture.Reasoning
Same test fixture for indentation/stylist testing; the whitespace anomaly is a deliberate test input.
-
⟨U+00A0⟩2, ⟨U+00A0⟩3, ) ";likely benign Test string with non-breaking space in stylist test fixture.Reasoning
Same stylist test fixture; no execution or exfiltration, just formatter test input.
-
info
whitespace-anomalyruff/crates/ruff_python_formatter/resources/test/fixtures/black/cases/docstring.py:2:1""" Multiline class docstring """ -
info
identifier-low-lengthruff/crates/ruff_python_formatter/resources/test/fixtures/black/cases/generics_wrapping.py:1:1 -
info
identifier-low-lengthruff/crates/ruff_python_formatter/resources/test/fixtures/black/cases/import_comments.py:1:1 -
info
identifier-low-lengthruff/crates/ruff_python_formatter/resources/test/fixtures/black/cases/pep_570.py:1:1 -
info
identifier-low-lengthruff/crates/ruff_python_formatter/resources/test/fixtures/black/cases/pep_572_py310.py:1:1 -
info
identifier-low-lengthruff/crates/ruff_python_formatter/resources/test/fixtures/black/cases/pep_646.py:1:1 -
info
identifier-low-lengthruff/crates/ruff_python_formatter/resources/test/fixtures/black/cases/percent_precedence.py:1:1 -
info
identifier-low-lengthruff/crates/ruff_python_formatter/resources/test/fixtures/black/cases/power_op_spacing_long.py:1:1 -
info
warn→ info by reviewnarrow-file-charsetruff/crates/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 with repeated power operator expressions.Reasoning
Black's power-operator spacing test case consists of repeated exponentiation expressions; the narrow charset is an artifact of the numeric test content, not obfuscation.
-
info
high-complexityruff/crates/ruff_python_formatter/resources/test/fixtures/black/cases/preview_long_strings.py:311:12 -
info
warn→ info by reviewhigh-complexityruff/crates/ruff_python_formatter/resources/test/fixtures/black/cases/preview_long_strings__east_asian_width.py:5:10= =likely benign Multilingual string literals used in a long-string formatting test.Reasoning
Ordinary Korean and Chinese string literals in a formatter test about east-asian width; high compression ratio is an artifact of short text, not malicious.
-
info
critical→ info by reviewdynamic-executionruff/crates/ruff_python_formatter/resources/test/fixtures/black/cases/preview_long_strings__regression.py:20:9likely benign Regression test fixture calling os.system with a formatted string literal.Reasoning
This is a formatter test input; the os.system call is inside a fixture file never executed, and the command is a literal string with .format applied, not a real dropper.
-
info
high-complexityruff/crates/ruff_python_formatter/resources/test/fixtures/black/cases/preview_long_strings__regression.py:235:17= f = f -
info
warn→ info by reviewunicode-invisibleruff/crates/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 Test fixture identifier containing a variation selector supplement character.Reasoning
Black's tricky unicode symbols fixture intentionally includes variation selectors in identifiers to test formatter handling; it is a test case, not a payload.
-
info
whitespace-anomalyruff/crates/ruff_python_formatter/resources/test/fixtures/ruff/docstring.py:2:1""" content\ """ return -
info
whitespace-anomalyruff/crates/ruff_python_formatter/resources/test/fixtures/ruff/docstring_code_examples.py:12:1""" Do cool stuff. -
info
whitespace-anomalyruff/crates/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-lengthruff/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/attribute.py:1:1 -
info
whitespace-anomalyruff/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/lambda.py:27:1# Trailing -
info
warn→ info by reviewdynamic-executionruff/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/lambda.py:845:5likely benign Formatter test input with subprocess shell=True and an rm -rf f-string.Reasoning
Formatter fixture for lambda expressions; the rm -rf command is inside a non-executed test file and the shell=True call is only syntactic input for formatting.
-
info
warn→ info by reviewdynamic-executionruff/crates/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 test input with subprocess shell=True in a lambda test case.Reasoning
Same formatter test fixture pattern for lambda formatting; not executed code.
-
info
identifier-low-lengthruff/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/nested_string_quote_style.py:1:1 -
info
identifier-low-lengthruff/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/tstring.py:1:1 -
info
long-lineruff/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/tuple.py:15:1= -
info
whitespace-anomalyruff/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/unary.py:2:1pass = True -
info
identifier-low-lengthruff/crates/ruff_python_formatter/resources/test/fixtures/ruff/fluent.py:1:1 -
info
whitespace-anomalyruff/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/mixed_space_and_tab.py:2:1# fmt: off -
info
identifier-low-lengthruff/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/off_on_off_on.py:1:1 -
info
whitespace-anomalyruff/crates/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-lengthruff/crates/ruff_python_formatter/resources/test/fixtures/ruff/parentheses/nested.py:1:1 -
info
identifier-low-lengthruff/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/delete.py:1:1 -
info
whitespace-anomalyruff/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/match.py:3:1: # dangling match comment : pass -
info
whitespace-anomalyruff/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/type_alias.py:42:1\ = \ = -
info
identifier-low-lengthruff/crates/ruff_python_parser/resources/inline/err/different_match_pattern_bindings.py:1:1 -
info
identifier-low-lengthruff/crates/ruff_python_parser/resources/inline/err/duplicate_type_parameter_names.py:1:1 -
info
identifier-low-lengthruff/crates/ruff_python_parser/resources/inline/err/invalid_annotation_function.py:1:1 -
info
unicode-mixed-scriptruff/crates/ruff_python_parser/resources/inline/err/invalid_byte_literal.py:1:6b rb b -
info
unicode-mixed-scriptruff/crates/ruff_python_parser/resources/inline/err/invalid_byte_literal.py:2:4b rb b -
info
unicode-mixed-scriptruff/crates/ruff_python_parser/resources/inline/err/invalid_byte_literal.py:3:8rb b -
info
identifier-low-lengthruff/crates/ruff_python_parser/resources/inline/ok/ambiguous_lpar_with_items_binary_expr.py:1:1 -
info
identifier-low-lengthruff/crates/ruff_python_parser/resources/inline/ok/non_duplicate_type_parameter_names.py:1:1 -
info
identifier-low-lengthruff/crates/ruff_python_parser/resources/valid/expressions/bool_op.py:1:1 -
info
identifier-low-lengthruff/crates/ruff_python_parser/resources/valid/expressions/compare.py:1:1 -
info
identifier-low-lengthruff/crates/ruff_python_parser/resources/valid/expressions/t_string.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 Test string enumerating byte escapes in the Rust string parser tests.Reasoning
A run of \xNN escapes enumerating all byte values is a parser unit test verifying escape handling, not an encoded payload.
-
info
warn→ info by reviewencoding-escape-soupruff/crates/ruff_python_parser/src/string.rs:939:247NOPQRSTUVWXYZ^_`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 A run of \xNN escape sequences in Rust string-parser code, most likely a test table of byte values.Reasoning
The snippet is a long run of byte-escape sequences in a Rust parser source file, which is typical of test fixtures that exercise string escape handling. Nothing indicates an encoded payload or execution.
-
\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 sequential table of byte escapes in Rust parser code, consistent with an exhaustive escape-handling test.Reasoning
This is a sequential table of all byte values written as escapes, in the ruff parser's string handling code. It is a standard way to write exhaustive escape tests, and the high entropy reflects the byte range rather than hidden data.
-
info
warn→ info by reviewencoding-escape-soupruff/crates/ruff_python_parser/src/string.rs:947:247NOPQRSTUVWXYZ^_`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 A continuation of the byte-value escape table in Rust parser code, consistent with a test fixture.Reasoning
This is a continuation of the same sequential byte-value table in ruff's Rust string parser. It is test or reference data for escape handling, with no execution or decoding behavior.
-
-
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")); /// ``` -
r#" b"123a𝐁<CURSOR>c" "#, ) -
1 | / 2 | | b"123a𝐁c" | |__________^ -
| 2 | b"123a𝐁c" | ^^^^^^^^^ "#); -
info
warn→ info by reviewlong-lineruff/crates/ty_python_semantic/resources/corpus/03_dict_unpack_huge.py:1:1likely benign A generated Python stress-test line of many dict unpacks in a type checker corpus.Reasoning
The file is in a type-checker test corpus and is named as a stress case for huge dict unpacking. The long line is a generated stress input, not obfuscation.
-
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/corpus/06_funcall_many_args.py:1:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/corpus/06_funcall_varargs_kwargs_mixed.py:1:1 -
info
critical→ info by reviewbuiltins-writeruff/crates/ty_python_semantic/resources/corpus/98_ann_assign_annotation_future_annotations.py:5:1: =likely benign A corpus test file assigning builtins.__import__ with an annotation, used to exercise the type checker.Reasoning
The file sits in a type-checker test corpus and is named for annotation handling. The assignment to builtins.__import__ is a semantic test input for type inference, not a deployed patch. It would be a concern in ordinary package code, which this is not.
-
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/annotations/intersection_types.md:195:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/annotations/invalid.md:415:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/annotations/new_types.md:525:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/annotations/string.md:254:1 -
info
critical→ info by reviewdynamic-importruff/crates/ty_python_semantic/resources/mdtest/call/dunder_import.md:33:17# revealed: Literal["sys", "os"] # revealed: ModuleTypelikely benign An mdtest example calling __import__ on a non-literal, used to check the type checker's revealed type.Reasoning
This is a markdown mdtest of how the type checker reveals the type of __import__ called on a variable. The dynamic call is the thing being tested, and the reveal_type comments show it is an analysis fixture.
-
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/call/functools_partial.md:385:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/call/functools_partial.md:1013:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/call/functools_partial.md:1727:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/comparison/instances/rich_comparison.md:236:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/comparison/instances/rich_comparison.md:500:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/comparison/tuples.md:16:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/comparison/tuples.md:37:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/comparison/tuples.md:61:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/comparison/tuples.md:234:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/comparison/tuples.md:274:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/comparison/tuples.md:311:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/comparison/tuples.md:500:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/diagnostics/semantic_syntax_errors.md:565:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/diagnostics/semantic_syntax_errors.md:637:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/diagnostics/unknown_argument.md:23:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/directives/assert_type.md:161:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/directives/assert_type.md:246:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/exhaustiveness_checking.md:516:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/function/parameters.md:56:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/function/return_type.md:312:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/legacy/callables.md:1111:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/legacy/functions.md:1534:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/legacy/functions.md:1729:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/legacy/functions.md:2047:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/legacy/variables.md:312:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/legacy/variables.md:1458:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/legacy/variance.md:25:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/legacy/variance.md:107:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/legacy/variance.md:220:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/pep695/aliases.md:734:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/pep695/callables.md:1409:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/pep695/classes.md:112:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/pep695/classes.md:1032:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/pep695/functions.md:2496:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/pep695/functions.md:2655:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/pep695/functions.md:2795:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/pep695/functions.md:2978:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/pep695/functions.md:3592:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/pep695/paramspec.md:46:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/pep695/paramspec.md:524:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/pep695/paramspec.md:1010:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/pep695/variables.md:232:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/pep695/variables.md:468:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/pep695/variables.md:572:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/pep695/variables.md:587:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/pep695/variables.md:608:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/pep695/variables.md:619:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/pep695/variables.md:1088:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/pep695/variables.md:1442:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/pep695/variables.md:1532:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/pep695/variance.md:32:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/pep695/variance.md:111:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/pep695/variance.md:219:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/pep695/variance.md:295:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/pep695/variance.md:624:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/pep695/variance.md:647:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/pep695/variance.md:834:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/pep695/variance.md:865:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/pep695/variance.md:1262:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/pep695/variance.md:1783:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/pep695/variance.md:2322:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/scoping.md:354:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/scoping.md:433:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/generics/scoping.md:532:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/implicit_type_aliases.md:798:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/implicit_type_aliases.md:2554:1 -
info
critical→ info by reviewbuiltins-writeruff/crates/ty_python_semantic/resources/mdtest/import/builtins.md:329:1= 123 = 456 # error: [unresolved-attribute] = 789 # error: [invalid-assignment]likely benign An mdtest assignment to builtins.foo with an expected diagnostic, used to test the type checker.Reasoning
The markdown mdtest contains deliberate builtins writes annotated with expected checker errors such as error: [unresolved-attribute]. These are test expectations for the type checker, not live patches.
-
info
critical→ info by reviewbuiltins-writeruff/crates/ty_python_semantic/resources/mdtest/import/builtins.md:330:1= 123 = 456 # error: [unresolved-attribute] = 789 # error: [invalid-assignment] = # error: [invalid-assignment]likely benign An mdtest assignment to builtins.bar annotated with an expected error, part of a type checker test.Reasoning
This is one of a block of mdtest lines assigning builtins attributes, each annotated with an expected diagnostic comment. The block is a test of how assignments to builtins are diagnosed.
-
info
critical→ info by reviewbuiltins-writeruff/crates/ty_python_semantic/resources/mdtest/import/builtins.md:331:1= 456 # error: [unresolved-attribute] = 789 # error: [invalid-assignment] = # error: [invalid-assignment] = 10likely benign An mdtest assignment to builtins.baz with an expected error annotation, used for type checker testing.Reasoning
The line is part of the same mdtest block, with checker error annotations marking expected diagnostics. It is a test fixture, not runtime code.
-
info
critical→ info by reviewbuiltins-writeruff/crates/ty_python_semantic/resources/mdtest/import/builtins.md:332:1= 789 # error: [invalid-assignment] = # error: [invalid-assignment] = 10likely benign An mdtest assignment to builtins.chr with an expected error annotation, used for type checker testing.Reasoning
This assignment to builtins.chr appears in an mdtest block with expected diagnostic comments. It exercises the checker's handling of builtin attribute assignment.
-
info
critical→ info by reviewbuiltins-writeruff/crates/ty_python_semantic/resources/mdtest/import/builtins.md:333:1= # error: [invalid-assignment] = 10likely benign A second mdtest assignment to builtins.chr, part of a type checker test block.Reasoning
This second assignment to builtins.chr is part of the same mdtest fixture, which tests how the type checker diagnoses such writes. The code is never executed as deployed software.
-
info
warn→ info by reviewunicode-mixed-scriptruff/crates/ty_python_semantic/resources/mdtest/import/star.md:1023:1= ```likely benign An mdtest identifier using a letter-like Unicode symbol that normalizes to __all__, likely a test of normalization in star-import handling.Reasoning
The identifier mixes Latin with a letter-like symbol and is used with append inside an mdtest for star-import __all__ handling. Such a name normalizes to __all__ under NFKC, so the test appears to check Unicode normalization of dunder names. It is a deliberate fixture, but the mixed-script name is the kind of construct the scanner flags, so some doubt remains.
-
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/intersection_types.md:136:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/intersection_types.md:185:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/narrow/aliased_conditions.md:168:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/narrow/assignment.md:105:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/narrow/assignment.md:451:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/narrow/complex_target.md:131:1 -
info
unicode-zero-widthruff/crates/ty_python_semantic/resources/mdtest/narrow/complex_target.md:146:32# In this case, it may seem like we can narrow it down to `int`, # but different values ⟨U+200B⟩⟨U+200B⟩may be reassigned to `x` and `y` in another place. # revealed: int | None -
info
unicode-zero-widthruff/crates/ty_python_semantic/resources/mdtest/narrow/complex_target.md:146:35# In this case, it may seem like we can narrow it down to `int`, # but different values ⟨U+200B⟩⟨U+200B⟩may be reassigned to `x` and `y` in another place. # revealed: int | None -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/narrow/conditionals/eq.md:586:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/narrow/conditionals/nested.md:77:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/narrow/conditionals/nested.md:122:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/narrow/conditionals/nested.md:310:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/narrow/type_guards.md:491:1 -
info
critical→ info by reviewdynamic-executionruff/crates/ty_python_semantic/resources/mdtest/pep613_type_aliases.md:867:28# typing conformance cases: : = # error: [invalid-type-form] : = # error: [invalid-type-form] : = # error: [invalid-type-form]likely benign An obfuscated eval that builds 'int' inside a type-checker conformance test case expecting an invalid-type-form error.Reasoning
This is a markdown test fixture for a type checker's conformance suite. The eval call decodes to the string 'int' and is annotated with an expected error, so it is a deliberately obfuscated invalid type alias meant to be rejected. Markdown fixtures are not imported or run by users, so the module-scope eval is test data, not a dropper.
-
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/pep695_type_aliases.md:390:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/type_properties/constraints.md:1090:1 -
info
warn→ info by reviewunicode-mixed-scriptruff/crates/ty_python_semantic/resources/mdtest/type_properties/quantification.md:19:20likely benign A subscripted set name Dᵧ in a logic table of quantifier examples.Reasoning
The identifier Dᵧ uses a Unicode subscript y, which is standard mathematical notation in a quantifier-logic table. The mixed-script flag comes from the subscript being classed as 'Other', and the pattern is legitimate in documentation.
-
info
warn→ info by reviewunicode-mixed-scriptruff/crates/ty_python_semantic/resources/mdtest/type_properties/quantification.md:19:35likely benign A subscripted set name Dₓ in the same logic table of quantifier examples.Reasoning
The identifier Dₓ uses a Unicode subscript x in the same mathematical table as Dᵧ. This is conventional notation in prose, not an identifier used to hide code or evade review.
-
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/type_qualifiers/classvar.md:12:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/type_qualifiers/classvar.md:145:1 -
info
identifier-low-lengthruff/crates/ty_python_semantic/resources/mdtest/type_qualifiers/classvar.md:289:1 -
info
warn→ info by reviewunicode-zero-widthruff/crates/ty_python_semantic/resources/mdtest/typed_dict.md:368:23likely benign A stray zero-width space in explanatory prose about TypedDict value types.Reasoning
A zero-width space sits in prose before a code block. It does not alter any code, and the sentence reads normally. This looks like a copy-paste or editing artifact rather than an attempt to hide instructions or change executed logic.
-
info
warn→ info by reviewunicode-zero-widthruff/crates/ty_python_semantic/resources/mdtest/typed_dict.md:368:26likely benign A second stray zero-width space in the same prose sentence about TypedDict inference.Reasoning
A second zero-width space appears adjacent to the first in the same prose line, consistent with a copy-paste artifact. The surrounding text is ordinary documentation with no hidden content and no effect on the following code block.
-
/// You must provide the `inherited_generic_context` that we should use for the `__new__` or /// `__init__` member. This is inherited from the containing class -⟨U+00AD⟩but importantly, from the /// class that the lookup is being performed on, and not the class containing the (possibly /// inherited) member. -
) -
) -
// Given constraints `α ≤ T` and `T ≤ β`, `α ≤ β` must also hold. If those bounds contain // other typevars, we can infer additional constraints. (α and U won't be bare typevars, // since those will be modeled by `TypeVarRange` bounds.) // -
// To handle all of these cases, we perform a constraint set assignability check to see // when `α ≤ β`. This gives us a constraint set, which should be the rhs of the sequent // implication. (That is, this check directly encodes `(α ≤ T) ∧ (T ≤ β) → (α ≤ β)` as an -
// when `α ≤ β`. This gives us a constraint set, which should be the rhs of the sequent // implication. (That is, this check directly encodes `(α ≤ T) ∧ (T ≤ β) → (α ≤ β)` as an // implication.) -
// when `α ≤ β`. This gives us a constraint set, which should be the rhs of the sequent // implication. (That is, this check directly encodes `(α ≤ T) ∧ (T ≤ β) → (α ≤ β)` as an // implication.) -
) -
) -
) -
) -
) -
) -
) -
) -
// Given `α ≤ T` and `U ≤ β`, if α contains U contravariantly, substitute β for U: // // (Contra[U] ≤ T) ∧ (U ≤ β) ⇒ (Contra[β] ≤ T) -
// Given `α ≤ T` and `U ≤ β`, if α contains U contravariantly, substitute β for U: // // (Contra[U] ≤ T) ∧ (U ≤ β) ⇒ (Contra[β] ≤ T) -
// If β contains T contravariantly, substitute α for T: // // (α ≤ T) ∧ (U ≤ Contra[T]) ⇒ (U ≤ Contra[α]) -
// // (α ≤ T) ∧ (U ≤ Contra[T]) ⇒ (U ≤ Contra[α]) if upper .bound -
// // (α ≤ T) ∧ (U ≤ Contra[T]) ⇒ (U ≤ Contra[α]) if upper .bound -
) -
) -
) -
) -
) -
) -
) -
) -
) -
) -
) -
) -
) -
) -
) -
) -
) -
) -
// (β ≤ α) ⇒ ((α ≤ T) ⇒ (β ≤ T)) if other_lower.is_constraint_set_subtype_of -
// (β ≤ α) ⇒ ((α ≤ T) ⇒ (β ≤ T)) if other_lower.is_constraint_set_subtype_of -
// (α ≤ β) ⇒ ((β ≤ T) ⇒ (α ≤ T)) if lower.is_constraint_set_subtype_of -
// (α ≤ β) ⇒ ((β ≤ T) ⇒ (α ≤ T)) if lower.is_constraint_set_subtype_of -
// `(α ≤ T) ∧ (β ≤ T)` is equivalent to `(α | β) ≤ T`. We do not create lower bounds that // are unions, so only add sequents when the union simplifies away. let combined = possibly_reversed_union; -
// `(α ≤ T) ∧ (β ≤ T)` is equivalent to `(α | β) ≤ T`. We do not create lower bounds that // are unions, so only add sequents when the union simplifies away. let combined = possibly_reversed_union; -
) -
) -
// `(α ≤ T) ∧ (T ≤ β)` simplifies to `T = α` when `α = β`. For ordinary typevars, only // simplify when the materialized bounds are the same `Type`; checking semantic equivalence // can recursively expand protocol members. ParamSpec bounds still need the semantic check -
// `(α ≤ T) ∧ (T ≤ β)` simplifies to `T = α` when `α = β`. For ordinary typevars, only // simplify when the materialized bounds are the same `Type`; checking semantic equivalence // can recursively expand protocol members. ParamSpec bounds still need the semantic check -
// `(α ≤ T) ∧ (T ≤ β)` simplifies to `T = α` when `α = β`. For ordinary typevars, only // simplify when the materialized bounds are the same `Type`; checking semantic equivalence // can recursively expand protocol members. ParamSpec bounds still need the semantic check -
// because callable types with different return types can represent the same parameter list. // (We don't need to add the projection implication `(T = α) ⇒ (α ≤ T)`, since anything we // can derive from `α ≤ T` we can also derive from `T = α`.) -
// because callable types with different return types can represent the same parameter list. // (We don't need to add the projection implication `(T = α) ⇒ (α ≤ T)`, since anything we // can derive from `α ≤ T` we can also derive from `T = α`.) -
// (We don't need to add the projection implication `(T = α) ⇒ (α ≤ T)`, since anything we // can derive from `α ≤ T` we can also derive from `T = α`.) let lower = self.bound.bottom_materialization; let upper = other.bound.top_materialization; -
// (We don't need to add the projection implication `(T = α) ⇒ (α ≤ T)`, since anything we // can derive from `α ≤ T` we can also derive from `T = α`.) let lower = self.bound.bottom_materialization; let upper = other.bound.top_materialization; -
) -
) -
// (α ≤ β) ⇒ ((T = β) ⇒ (α ≤ T)) // This requires a static equivalence bound: `T = Any` permits `T = str`, so // assignability of `int` to `Any` does not imply `int ≤ T`. -
// (α ≤ β) ⇒ ((T = β) ⇒ (α ≤ T)) // This requires a static equivalence bound: `T = Any` permits `T = str`, so // assignability of `int` to `Any` does not imply `int ≤ T`. -
// Given constraints `α ≤ T` and `T = β`, `α ≤ β` must also hold. If those bounds contain // other typevars, we can infer additional constraints. add_sequents_for_range; -
// Given constraints `α ≤ T` and `T = β`, `α ≤ β` must also hold. If those bounds contain // other typevars, we can infer additional constraints. add_sequents_for_range; -
) -
) -
// We can infer sequents from `α ≤ T` and `S ≤ U` if α _contains_ U. add_covariant_lower_weakened_sequent; add_contravariant_lower_weakened_sequent; -
// We can infer sequents from `α ≤ T` and `S ≤ U` if α _contains_ U. add_covariant_lower_weakened_sequent; add_contravariant_lower_weakened_sequent; -
) -
) -
// We can infer sequents from `α ≤ T` and `S ≤ U` if α _contains_ U. map.add_grouped_sequents -
// We can infer sequents from `α ≤ T` and `S ≤ U` if α _contains_ U. map.add_grouped_sequents -
) -
) -
// (α ≤ β) ⇒ ((T ≤ α) ⇒ (T ≤ β)) if upper.is_constraint_set_subtype_of -
// (α ≤ β) ⇒ ((T ≤ α) ⇒ (T ≤ β)) if upper.is_constraint_set_subtype_of -
// (β ≤ α) ⇒ ((T ≤ β) ⇒ (T ≤ α)) if other_upper.is_constraint_set_subtype_of -
// (β ≤ α) ⇒ ((T ≤ β) ⇒ (T ≤ α)) if other_upper.is_constraint_set_subtype_of -
// `(T ≤ α) ∧ (T ≤ β)` is equivalent to `T ≤ (α & β)`. We do not create upper bounds that // are intersections, so only add sequents when the intersection simplifies away. let combined = possibly_reversed_intersection; -
// `(T ≤ α) ∧ (T ≤ β)` is equivalent to `T ≤ (α & β)`. We do not create upper bounds that // are intersections, so only add sequents when the intersection simplifies away. let combined = possibly_reversed_intersection; -
) -
) -
// (β ≤ α) ⇒ ((T = β) ⇒ (T ≤ α)) // This requires a static equivalence bound: `T = Any` permits `T = str`, so // assignability of `Any` to `int` does not imply `T ≤ int`. -
// (β ≤ α) ⇒ ((T = β) ⇒ (T ≤ α)) // This requires a static equivalence bound: `T = Any` permits `T = str`, so // assignability of `Any` to `int` does not imply `T ≤ int`. -
) -
) -
// We can infer sequents from `T ≤ α` and `S ≤ U` if α _contains_ S. add_covariant_upper_weakened_sequent; add_contravariant_upper_weakened_sequent; -
// We can infer sequents from `T ≤ α` and `S ≤ U` if α _contains_ S. add_covariant_upper_weakened_sequent; add_contravariant_upper_weakened_sequent; -
) -
) -
// We can infer sequents from `T ≤ α` and `S = U` if α _contains_ S. map.add_grouped_sequents -
// We can infer sequents from `T ≤ α` and `S = U` if α _contains_ S. map.add_grouped_sequents -
) -
) -
) -
// Given `T = α` and `T = β`, if α and β are equivalent (but not _identical_), we can infer // either from the other. if self.bound == other.bound -
// Given `T = α` and `T = β`, if α and β are equivalent (but not _identical_), we can infer // either from the other. if self.bound == other.bound -
// Given constraints `T = α` and `T = β`, `α = β` must also hold. If those bounds contain // other typevars, we can infer additional constraints. add_sequents_for_equivalence; -
// Given constraints `T = α` and `T = β`, `α = β` must also hold. If those bounds contain // other typevars, we can infer additional constraints. add_sequents_for_equivalence; -
) -
) -
// Given constraints `T = α` and `U ≤ T`, `U ≤ α` must also hold. // The retained equality likewise makes this an equivalent replacement for `U ≤ T`. if self.typevar.is_same_typevar_as -
// Given constraints `T = α` and `U ≤ T`, `U ≤ α` must also hold. // The retained equality likewise makes this an equivalent replacement for `U ≤ T`. if self.typevar.is_same_typevar_as -
// We can infer sequents from `T = α` and `S ≤ U` if α _contains_ S or U. add_covariant_lower_weakened_sequent; add_covariant_upper_weakened_sequent; -
// We can infer sequents from `T = α` and `S ≤ U` if α _contains_ S or U. add_covariant_lower_weakened_sequent; add_covariant_upper_weakened_sequent; -
) -
) -
// We can infer sequents from `T = α` and `S = U` if α _contains_ U. map.add_grouped_sequents -
// We can infer sequents from `T = α` and `S = U` if α _contains_ U. map.add_grouped_sequents -
// // (α | β) ≤ T ⇔ (α ≤ T) ∧ (β ≤ T) match bound -
// // (α | β) ≤ T ⇔ (α ≤ T) ∧ (β ≤ T) match bound -
// // T ≤ (α & β) ⇔ (T ≤ α) ∧ (T ≤ β) // T ≤ (¬α & ¬β) ⇔ (T ≤ ¬α) ∧ (T ≤ ¬β) match bound -
// // T ≤ (α & β) ⇔ (T ≤ α) ∧ (T ≤ β) // T ≤ (¬α & ¬β) ⇔ (T ≤ ¬α) ∧ (T ≤ ¬β) match bound -
// T ≤ (α & β) ⇔ (T ≤ α) ∧ (T ≤ β) // T ≤ (¬α & ¬β) ⇔ (T ≤ ¬α) ∧ (T ≤ ¬β) match bound -
// T ≤ (α & β) ⇔ (T ≤ α) ∧ (T ≤ β) // T ≤ (¬α & ¬β) ⇔ (T ≤ ¬α) ∧ (T ≤ ¬β) match bound -
//! ```text //! μF. λT. tuple[T, F[list[T]] | None] //! ``` //! -
//! //! Here `μF` binds the recursive constructor, and `λT` binds its type parameter. //! The occurrence `F[list[T]]` is stored as `RecursiveVar` with the constructor's //! `RecursiveCycle` and unspecialized arguments `[list[T]]`. -
//! ```text //! unfold((μF. λT. tuple[T, F[list[T]] | None])[int]) //! = tuple[int, (μF. λT. tuple[T, F[list[T]] | None])[list[int]] | None] //! = tuple[int, Tree[list[int]] | None] -
//! unfold((μF. λT. tuple[T, F[list[T]] | None])[int]) //! = tuple[int, (μF. λT. tuple[T, F[list[T]] | None])[list[int]] | None] //! = tuple[int, Tree[list[int]] | None] //! ``` -
/// If the value ⟨U+200B⟩⟨U+200B⟩is defined recursively, widening is performed from fewer literal elements, /// resulting in faster convergence of the fixed-point iteration. const MAX_RECURSIVE_UNION_LITERALS: usize = 5; -
/// If the value ⟨U+200B⟩⟨U+200B⟩is defined recursively, widening is performed from fewer literal elements, /// resulting in faster convergence of the fixed-point iteration. const MAX_RECURSIVE_UNION_LITERALS: usize = 5; -
const MAX_RECURSIVE_UNION_LITERALS: usize = 5; /// If the value ⟨U+200B⟩⟨U+200B⟩is defined non-recursively, the fixed-point iteration will converge in one go, /// so in principle we can have as many literal elements as we want. /// We set a large limit for union and enum literals. -
const MAX_RECURSIVE_UNION_LITERALS: usize = 5; /// If the value ⟨U+200B⟩⟨U+200B⟩is defined non-recursively, the fixed-point iteration will converge in one go, /// so in principle we can have as many literal elements as we want. /// We set a large limit for union and enum literals.
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.
|
&&