diff --git a/stubs/pyflakes/@tests/stubtest_allowlist.txt b/stubs/pyflakes/@tests/stubtest_allowlist.txt index 3ea354771..c803fc98b 100644 --- a/stubs/pyflakes/@tests/stubtest_allowlist.txt +++ b/stubs/pyflakes/@tests/stubtest_allowlist.txt @@ -22,4 +22,5 @@ pyflakes.messages.UndefinedLocal.message_args pyflakes.messages.UndefinedName.message_args pyflakes.messages.UnusedAnnotation.message_args pyflakes.messages.UnusedImport.message_args +pyflakes.messages.UnusedIndirectAssignment.message_args pyflakes.messages.UnusedVariable.message_args diff --git a/stubs/pyflakes/METADATA.toml b/stubs/pyflakes/METADATA.toml index 0974abae9..c94416652 100644 --- a/stubs/pyflakes/METADATA.toml +++ b/stubs/pyflakes/METADATA.toml @@ -1,4 +1,4 @@ -version = "3.2.*" +version = "3.3.*" upstream_repository = "https://github.com/PyCQA/pyflakes" partial_stub = true diff --git a/stubs/pyflakes/pyflakes/api.pyi b/stubs/pyflakes/pyflakes/api.pyi index 3cf689390..59dc4ca8a 100644 --- a/stubs/pyflakes/pyflakes/api.pyi +++ b/stubs/pyflakes/pyflakes/api.pyi @@ -1,6 +1,6 @@ +from _typeshed import Incomplete from collections.abc import Iterable, Iterator, Sequence from re import Pattern -from typing import Any from pyflakes.reporter import Reporter @@ -11,6 +11,6 @@ PYTHON_SHEBANG_REGEX: Pattern[bytes] def check(codeString: str, filename: str, reporter: Reporter | None = None) -> int: ... def checkPath(filename, reporter: Reporter | None = None) -> int: ... def isPythonFile(filename) -> bool: ... -def iterSourceCode(paths: Iterable[Any]) -> Iterator[Any]: ... -def checkRecursive(paths: Iterable[Any], reporter: Reporter) -> int: ... -def main(prog: str | None = None, args: Sequence[Any] | None = None) -> None: ... +def iterSourceCode(paths: Iterable[Incomplete]) -> Iterator[Incomplete]: ... +def checkRecursive(paths: Iterable[Incomplete], reporter: Reporter) -> int: ... +def main(prog: str | None = None, args: Sequence[Incomplete] | None = None) -> None: ... diff --git a/stubs/pyflakes/pyflakes/checker.pyi b/stubs/pyflakes/pyflakes/checker.pyi index 0d60f10dc..51385f672 100644 --- a/stubs/pyflakes/pyflakes/checker.pyi +++ b/stubs/pyflakes/pyflakes/checker.pyi @@ -1,17 +1,17 @@ import ast import sys +from _typeshed import Incomplete from collections.abc import Callable, Generator, Iterable, Iterator from contextlib import contextmanager from re import Pattern from typing import Any, ClassVar, Literal, TypeVar, overload -from typing_extensions import ParamSpec, TypeAlias +from typing_extensions import Never, ParamSpec, TypeAlias from pyflakes.messages import Message _AnyFunction: TypeAlias = Callable[..., Any] _F = TypeVar("_F", bound=_AnyFunction) _P = ParamSpec("_P") -_T = TypeVar("_T") PYPY: bool @@ -33,19 +33,15 @@ def parse_percent_format(s: str) -> tuple[_PercentFormat, ...]: ... class _FieldsOrder(dict[type[ast.AST], tuple[str, ...]]): def __missing__(self, node_class: type[ast.AST]) -> tuple[str, ...]: ... -def counter(items: Iterable[_T]) -> dict[_T, int]: ... - _OmitType: TypeAlias = str | tuple[str, ...] | None def iter_child_nodes(node: ast.AST, omit: _OmitType = None, _fields_order: _FieldsOrder = ...) -> Iterator[ast.AST]: ... @overload -def convert_to_value(item: ast.Str) -> str: ... # type: ignore[overload-overlap] +def convert_to_value(item: ast.Constant) -> Any: ... # type: ignore[overload-overlap] # See ast.Constant.value for possible return types @overload -def convert_to_value(item: ast.Bytes) -> bytes: ... # type: ignore[overload-overlap] +def convert_to_value(item: ast.Tuple) -> tuple[Any, ...]: ... # type: ignore[overload-overlap] # Tuple items depend on their ast type @overload -def convert_to_value(item: ast.Tuple) -> tuple[Any, ...]: ... # type: ignore[overload-overlap] -@overload -def convert_to_value(item: ast.Name | ast.NameConstant) -> Any: ... +def convert_to_value(item: ast.Name) -> VariableKey: ... # type: ignore[overload-overlap] @overload def convert_to_value(item: ast.AST) -> UnhandledKeyType: ... def is_notimplemented_name_node(node: object) -> bool: ... @@ -53,7 +49,7 @@ def is_notimplemented_name_node(node: object) -> bool: ... class Binding: name: str source: ast.AST | None - used: Literal[False] | tuple[Any, ast.AST] + used: Literal[False] | tuple[Incomplete, ast.AST] def __init__(self, name: str, source: ast.AST | None) -> None: ... def redefines(self, other: Binding) -> bool: ... @@ -72,7 +68,7 @@ class VariableKey: class Importation(Definition): fullName: str - redefined: list[Any] + redefined: list[Incomplete] def __init__(self, name: str, source: ast.AST | None, full_name: str | None = None) -> None: ... @property def source_statement(self) -> str: ... @@ -89,7 +85,7 @@ class StarImportation(Importation): def __init__(self, name: str, source: ast.AST) -> None: ... class FutureImportation(ImportationFrom): - used: tuple[Any, ast.AST] + used: tuple[Incomplete, ast.AST] def __init__(self, name: str, source: ast.AST, scope) -> None: ... class Argument(Binding): ... @@ -114,7 +110,7 @@ class FunctionScope(Scope): usesLocals: bool alwaysUsed: ClassVar[set[str]] globals: set[str] - returnValue: Any + returnValue: Incomplete isGenerator: bool def __init__(self) -> None: ... def unused_assignments(self) -> Iterator[tuple[str, Binding]]: ... @@ -154,34 +150,36 @@ if sys.version_info >= (3, 10): _MatchAs: TypeAlias = ast.MatchAs _MatchOr: TypeAlias = ast.MatchOr else: - _Match: TypeAlias = Any - _MatchCase: TypeAlias = Any - _MatchValue: TypeAlias = Any - _MatchSingleton: TypeAlias = Any - _MatchSequence: TypeAlias = Any - _MatchStar: TypeAlias = Any - _MatchMapping: TypeAlias = Any - _MatchClass: TypeAlias = Any - _MatchAs: TypeAlias = Any - _MatchOr: TypeAlias = Any + # The methods using these should never be called on Python < 3.10. + _Match: TypeAlias = Never + _MatchCase: TypeAlias = Never + _MatchValue: TypeAlias = Never + _MatchSingleton: TypeAlias = Never + _MatchSequence: TypeAlias = Never + _MatchStar: TypeAlias = Never + _MatchMapping: TypeAlias = Never + _MatchClass: TypeAlias = Never + _MatchAs: TypeAlias = Never + _MatchOr: TypeAlias = Never if sys.version_info >= (3, 12): _TypeVar: TypeAlias = ast.TypeVar _TypeAlias: TypeAlias = ast.TypeAlias else: - _TypeVar: TypeAlias = Any - _TypeAlias: TypeAlias = Any + # The methods using these should never be called on Python < 3.12. + _TypeVar: TypeAlias = Never + _TypeAlias: TypeAlias = Never class Checker: nodeDepth: int offset: tuple[int, int] | None builtIns: set[str] - deadScopes: list[Any] - messages: list[Any] + deadScopes: list[Incomplete] + messages: list[Incomplete] filename: str withDoctest: bool scopeStack: list[Scope] - exceptHandlers: list[Any] + exceptHandlers: list[Incomplete] root: ast.AST def __init__( self, @@ -189,7 +187,7 @@ class Checker: filename: str = "(none)", builtins: Iterable[str] | None = None, withDoctest: bool = False, - file_tokens: tuple[Any, ...] = (), + file_tokens: tuple[Incomplete, ...] = (), ) -> None: ... def deferFunction(self, callable: _AnyFunction) -> None: ... @property diff --git a/stubs/pyflakes/pyflakes/messages.pyi b/stubs/pyflakes/pyflakes/messages.pyi index 07371e582..1338e037b 100644 --- a/stubs/pyflakes/pyflakes/messages.pyi +++ b/stubs/pyflakes/pyflakes/messages.pyi @@ -1,83 +1,88 @@ import ast +from _typeshed import Incomplete from typing import Any, ClassVar class Message: message: ClassVar[str] - message_args: tuple[Any, ...] - filename: Any + message_args: tuple[Any, ...] # Tuple types differ between sub-classes. + filename: str lineno: int col: int - def __init__(self, filename, loc: ast.AST) -> None: ... + def __init__(self, filename: str, loc: ast.AST) -> None: ... class UnusedImport(Message): - message_args: tuple[Any] - def __init__(self, filename, loc: ast.AST, name) -> None: ... + message_args: tuple[Incomplete] + def __init__(self, filename: str, loc: ast.AST, name) -> None: ... class RedefinedWhileUnused(Message): - message_args: tuple[Any, int] - def __init__(self, filename, loc: ast.AST, name, orig_loc: ast.AST) -> None: ... + message_args: tuple[Incomplete, int] + def __init__(self, filename: str, loc: ast.AST, name, orig_loc: ast.AST) -> None: ... class ImportShadowedByLoopVar(Message): - message_args: tuple[Any, int] - def __init__(self, filename, loc: ast.AST, name, orig_loc: ast.AST) -> None: ... + message_args: tuple[Incomplete, int] + def __init__(self, filename: str, loc: ast.AST, name, orig_loc: ast.AST) -> None: ... class ImportStarNotPermitted(Message): - message_args: Any - def __init__(self, filename, loc, modname) -> None: ... + message_args: Incomplete + def __init__(self, filename: str, loc, modname) -> None: ... class ImportStarUsed(Message): - message_args: tuple[Any] - def __init__(self, filename, loc: ast.AST, modname) -> None: ... + message_args: tuple[Incomplete] + def __init__(self, filename: str, loc: ast.AST, modname) -> None: ... class ImportStarUsage(Message): - message_args: tuple[Any, Any] - def __init__(self, filename, loc: ast.AST, name, from_list) -> None: ... + message_args: tuple[Incomplete, Incomplete] + def __init__(self, filename: str, loc: ast.AST, name, from_list) -> None: ... class UndefinedName(Message): - message_args: tuple[Any] - def __init__(self, filename, loc: ast.AST, name) -> None: ... + message_args: tuple[Incomplete] + def __init__(self, filename: str, loc: ast.AST, name) -> None: ... class DoctestSyntaxError(Message): message_args: tuple[()] - def __init__(self, filename, loc: ast.AST, position: tuple[int, int] | None = None) -> None: ... + def __init__(self, filename: str, loc: ast.AST, position: tuple[int, int] | None = None) -> None: ... class UndefinedExport(Message): - message_args: tuple[Any] - def __init__(self, filename, loc: ast.AST, name) -> None: ... + message_args: tuple[Incomplete] + def __init__(self, filename: str, loc: ast.AST, name) -> None: ... class UndefinedLocal(Message): default: ClassVar[str] builtin: ClassVar[str] - message_args: tuple[Any, int] - def __init__(self, filename, loc: ast.AST, name, orig_loc: ast.AST) -> None: ... + message_args: tuple[Incomplete, int] + def __init__(self, filename: str, loc: ast.AST, name, orig_loc: ast.AST) -> None: ... class DuplicateArgument(Message): - message_args: tuple[Any] - def __init__(self, filename, loc: ast.AST, name) -> None: ... + message_args: tuple[Incomplete] + def __init__(self, filename: str, loc: ast.AST, name) -> None: ... class MultiValueRepeatedKeyLiteral(Message): - message_args: tuple[Any] - def __init__(self, filename, loc: ast.AST, key) -> None: ... + message_args: tuple[Incomplete] + def __init__(self, filename: str, loc: ast.AST, key) -> None: ... class MultiValueRepeatedKeyVariable(Message): - message_args: tuple[Any] - def __init__(self, filename, loc: ast.AST, key) -> None: ... + message_args: tuple[Incomplete] + def __init__(self, filename: str, loc: ast.AST, key) -> None: ... class LateFutureImport(Message): message_args: tuple[()] - def __init__(self, filename, loc: ast.AST) -> None: ... + def __init__(self, filename: str, loc: ast.AST) -> None: ... class FutureFeatureNotDefined(Message): - message_args: tuple[Any] - def __init__(self, filename, loc: ast.AST, name) -> None: ... + message_args: tuple[Incomplete] + def __init__(self, filename: str, loc: ast.AST, name) -> None: ... class UnusedVariable(Message): - message_args: tuple[Any] - def __init__(self, filename, loc: ast.AST, names) -> None: ... + message_args: tuple[Incomplete] + def __init__(self, filename: str, loc: ast.AST, names) -> None: ... class UnusedAnnotation(Message): - message_args: tuple[Any] - def __init__(self, filename, loc: ast.AST, names) -> None: ... + message_args: tuple[Incomplete] + def __init__(self, filename: str, loc: ast.AST, names) -> None: ... + +class UnusedIndirectAssignment(Message): + message_args: tuple[str, str] + def __init__(self, filename: str, loc: ast.AST, name: str) -> None: ... class ReturnOutsideFunction(Message): ... class YieldOutsideFunction(Message): ... @@ -90,8 +95,8 @@ class IfTuple(Message): ... class AssertTuple(Message): ... class ForwardAnnotationSyntaxError(Message): - message_args: tuple[Any] - def __init__(self, filename, loc: ast.AST, annotation) -> None: ... + message_args: tuple[Incomplete] + def __init__(self, filename: str, loc: ast.AST, annotation) -> None: ... class RaiseNotImplemented(Message): ... class InvalidPrintSyntax(Message): ... @@ -99,44 +104,44 @@ class IsLiteral(Message): ... class FStringMissingPlaceholders(Message): ... class StringDotFormatExtraPositionalArguments(Message): - message_args: tuple[Any] - def __init__(self, filename, loc: ast.AST, extra_positions) -> None: ... + message_args: tuple[Incomplete] + def __init__(self, filename: str, loc: ast.AST, extra_positions) -> None: ... class StringDotFormatExtraNamedArguments(Message): - message_args: tuple[Any] - def __init__(self, filename, loc: ast.AST, extra_keywords) -> None: ... + message_args: tuple[Incomplete] + def __init__(self, filename: str, loc: ast.AST, extra_keywords) -> None: ... class StringDotFormatMissingArgument(Message): - message_args: tuple[Any] - def __init__(self, filename, loc: ast.AST, missing_arguments) -> None: ... + message_args: tuple[Incomplete] + def __init__(self, filename: str, loc: ast.AST, missing_arguments) -> None: ... class StringDotFormatMixingAutomatic(Message): ... class StringDotFormatInvalidFormat(Message): - message_args: tuple[Any] - def __init__(self, filename, loc: ast.AST, error) -> None: ... + message_args: tuple[Incomplete] + def __init__(self, filename: str, loc: ast.AST, error) -> None: ... class PercentFormatInvalidFormat(Message): - message_args: tuple[Any] - def __init__(self, filename, loc: ast.AST, error) -> None: ... + message_args: tuple[Incomplete] + def __init__(self, filename: str, loc: ast.AST, error) -> None: ... class PercentFormatMixedPositionalAndNamed(Message): ... class PercentFormatUnsupportedFormatCharacter(Message): - message_args: tuple[Any] - def __init__(self, filename, loc: ast.AST, c) -> None: ... + message_args: tuple[Incomplete] + def __init__(self, filename: str, loc: ast.AST, c) -> None: ... class PercentFormatPositionalCountMismatch(Message): message_args: tuple[int, int] - def __init__(self, filename, loc: ast.AST, n_placeholders: int, n_substitutions: int) -> None: ... + def __init__(self, filename: str, loc: ast.AST, n_placeholders: int, n_substitutions: int) -> None: ... class PercentFormatExtraNamedArguments(Message): - message_args: tuple[Any] - def __init__(self, filename, loc: ast.AST, extra_keywords) -> None: ... + message_args: tuple[Incomplete] + def __init__(self, filename: str, loc: ast.AST, extra_keywords) -> None: ... class PercentFormatMissingArgument(Message): - message_args: tuple[Any] - def __init__(self, filename, loc: ast.AST, missing_arguments) -> None: ... + message_args: tuple[Incomplete] + def __init__(self, filename: str, loc: ast.AST, missing_arguments) -> None: ... class PercentFormatExpectedMapping(Message): ... class PercentFormatExpectedSequence(Message): ...