ruff/crates/ty_python_semantic/resources/mdtest/declaration/error.md
2025-05-03 19:49:15 +02:00

1.3 KiB

Errors while declaring

Violates previous assignment

x = 1
x: str  # error: [invalid-declaration] "Cannot declare type `str` for inferred type `Literal[1]`"

Incompatible declarations

def _(flag: bool):
    if flag:
        x: str
    else:
        x: int

    x = 1  # error: [conflicting-declarations] "Conflicting declared types for `x`: str, int"

Incompatible declarations for 2 (out of 3) types

def _(flag1: bool, flag2: bool):
    if flag1:
        x: str
    elif flag2:
        x: int

    # Here, the declared type for `x` is `int | str | Unknown`.
    x = 1  # error: [conflicting-declarations] "Conflicting declared types for `x`: str, int"

Incompatible declarations with bad assignment

def _(flag: bool):
    if flag:
        x: str
    else:
        x: int

    # error: [conflicting-declarations]
    # error: [invalid-assignment]
    x = b"foo"

No errors

Currently, we avoid raising the conflicting-declarations for the following cases:

Partial declarations

def _(flag: bool):
    if flag:
        x: int

    x = 1

Partial declarations in try-except

Refer to https://github.com/astral-sh/ruff/issues/13966

def _():
    try:
        x: int = 1
    except:
        x = 2

    x = 3