mirror of
				https://github.com/astral-sh/ruff.git
				synced 2025-10-31 12:05:57 +00:00 
			
		
		
		
	 86fd9b634e
			
		
	
	
		86fd9b634e
		
			
		
	
	
	
	
		
			
			## Summary Format conflicting declared types as ``` `str`, `int` and `bytes` ``` Thanks to @AlexWaygood for the initial draft. @dcreager, looking forward to your one-character follow-up PR.
		
			
				
	
	
	
	
		
			1.7 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	
			1.7 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` and `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` and `int`"
Incompatible declarations with repeated types
def _(flag1: bool, flag2: bool, flag3: bool, flag4: bool):
    if flag1:
        x: str
    elif flag2:
        x: int
    elif flag3:
        x: int
    elif flag4:
        x: str
    else:
        x: bytes
    x = "a"  # error: [conflicting-declarations] "Conflicting declared types for `x`: `str`, `int` and `bytes`"
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