Complete pyflakes (#13848)

This commit is contained in:
Semyon Moroz
2025-04-28 16:42:26 +04:00
committed by GitHub
parent 4ba81e82a5
commit 232c31c5c4
9 changed files with 119 additions and 92 deletions
-1
View File
@@ -74,7 +74,6 @@
"stubs/psycopg2",
"stubs/pyasn1",
"stubs/pycurl",
"stubs/pyflakes",
"stubs/Pygments",
"stubs/PyMySQL",
"stubs/python-crontab",
@@ -3,6 +3,7 @@ pyflakes.messages.DuplicateArgument.message_args
pyflakes.messages.ForwardAnnotationSyntaxError.message_args
pyflakes.messages.FutureFeatureNotDefined.message_args
pyflakes.messages.ImportShadowedByLoopVar.message_args
pyflakes.messages.ImportStarNotPermitted.message_args
pyflakes.messages.ImportStarUsage.message_args
pyflakes.messages.ImportStarUsed.message_args
pyflakes.messages.MultiValueRepeatedKeyLiteral.message_args
@@ -24,3 +25,6 @@ pyflakes.messages.UnusedAnnotation.message_args
pyflakes.messages.UnusedImport.message_args
pyflakes.messages.UnusedIndirectAssignment.message_args
pyflakes.messages.UnusedVariable.message_args
# Tests are not included:
pyflakes.test.*
-4
View File
@@ -1,6 +1,2 @@
version = "~=3.3.2"
upstream_repository = "https://github.com/PyCQA/pyflakes"
partial_stub = true
[tool.stubtest]
ignore_missing_stub = true
+3 -1
View File
@@ -1 +1,3 @@
__version__: str
from typing import Final
__version__: Final[str]
+1
View File
@@ -0,0 +1 @@
from pyflakes.api import main as main
+8 -7
View File
@@ -1,16 +1,17 @@
from _typeshed import Incomplete
from _typeshed import GenericPath
from collections.abc import Iterable, Iterator, Sequence
from re import Pattern
from typing import Final, NoReturn
from pyflakes.reporter import Reporter
__all__ = ["check", "checkPath", "checkRecursive", "iterSourceCode", "main"]
PYTHON_SHEBANG_REGEX: Pattern[bytes]
PYTHON_SHEBANG_REGEX: Final[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[Incomplete]) -> Iterator[Incomplete]: ...
def checkRecursive(paths: Iterable[Incomplete], reporter: Reporter) -> int: ...
def main(prog: str | None = None, args: Sequence[Incomplete] | None = None) -> None: ...
def checkPath(filename: str, reporter: Reporter | None = None) -> int: ...
def isPythonFile(filename: str) -> bool: ...
def iterSourceCode(paths: Iterable[GenericPath[str]]) -> Iterator[GenericPath[str]]: ...
def checkRecursive(paths: Iterable[GenericPath[str]], reporter: Reporter) -> int: ...
def main(prog: str | None = None, args: Sequence[str] | None = None) -> NoReturn: ...
+47 -26
View File
@@ -1,10 +1,10 @@
import ast
import sys
from _typeshed import Incomplete
from collections.abc import Callable, Generator, Iterable, Iterator
from _typeshed import StrOrLiteralStr, Unused
from collections.abc import Callable, Generator, Iterable, Iterator, Sequence
from contextlib import contextmanager
from re import Pattern
from typing import Any, ClassVar, Literal, TypeVar, overload
from typing import Any, ClassVar, Final, Literal, TypeVar, overload
from typing_extensions import Never, ParamSpec, TypeAlias
from pyflakes.messages import Message
@@ -13,16 +13,25 @@ _AnyFunction: TypeAlias = Callable[..., Any]
_F = TypeVar("_F", bound=_AnyFunction)
_P = ParamSpec("_P")
PYPY: bool
PYPY: Final[bool]
builtin_vars: Final[list[str]]
def getAlternatives(n: ast.If | ast.Try) -> list[ast.AST]: ...
def parse_format_string(
format_string: StrOrLiteralStr,
) -> Iterable[tuple[StrOrLiteralStr, StrOrLiteralStr | None, StrOrLiteralStr | None, StrOrLiteralStr | None]]: ...
FOR_TYPES: tuple[type[ast.For], type[ast.AsyncFor]]
MAPPING_KEY_RE: Pattern[str]
CONVERSION_FLAG_RE: Pattern[str]
WIDTH_RE: Pattern[str]
PRECISION_RE: Pattern[str]
LENGTH_RE: Pattern[str]
if sys.version_info >= (3, 10):
def getAlternatives(n: ast.If | ast.Try | ast.Match) -> list[ast.AST]: ...
else:
def getAlternatives(n: ast.If | ast.Try) -> list[ast.AST]: ...
FOR_TYPES: Final[tuple[type[ast.For], type[ast.AsyncFor]]]
MAPPING_KEY_RE: Final[Pattern[str]]
CONVERSION_FLAG_RE: Final[Pattern[str]]
WIDTH_RE: Final[Pattern[str]]
PRECISION_RE: Final[Pattern[str]]
LENGTH_RE: Final[Pattern[str]]
VALID_CONVERSIONS: frozenset[str]
_FormatType: TypeAlias = tuple[str | None, str | None, str | None, str | None, str]
@@ -44,12 +53,12 @@ def convert_to_value(item: ast.Tuple) -> tuple[Any, ...]: ... # type: ignore[ov
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: ...
def is_notimplemented_name_node(node: ast.AST) -> bool: ...
class Binding:
name: str
source: ast.AST | None
used: Literal[False] | tuple[Incomplete, ast.AST]
used: Literal[False] | tuple[Scope, ast.AST]
def __init__(self, name: str, source: ast.AST | None) -> None: ...
def redefines(self, other: Binding) -> bool: ...
@@ -68,7 +77,7 @@ class VariableKey:
class Importation(Definition):
fullName: str
redefined: list[Incomplete]
redefined: list[ast.AST]
def __init__(self, name: str, source: ast.AST | None, full_name: str | None = None) -> None: ...
@property
def source_statement(self) -> str: ...
@@ -85,11 +94,12 @@ class StarImportation(Importation):
def __init__(self, name: str, source: ast.AST) -> None: ...
class FutureImportation(ImportationFrom):
used: tuple[Incomplete, ast.AST]
def __init__(self, name: str, source: ast.AST, scope) -> None: ...
used: tuple[Scope, ast.AST]
def __init__(self, name: str, source: ast.AST, scope: Scope) -> None: ...
class Argument(Binding): ...
class Assignment(Binding): ...
class NamedExprAssignment(Assignment): ...
class Annotation(Binding):
def redefines(self, other: Binding) -> Literal[False]: ...
@@ -111,7 +121,7 @@ class FunctionScope(Scope):
usesLocals: bool
alwaysUsed: ClassVar[set[str]]
globals: set[str]
returnValue: Incomplete
returnValue: ast.expr | None
isGenerator: bool
def __init__(self) -> None: ...
def unused_assignments(self) -> Iterator[tuple[str, Binding]]: ...
@@ -129,7 +139,7 @@ def getNodeName(node: ast.AST) -> str: ...
TYPING_MODULES: frozenset[Literal["typing", "typing_extensions"]]
def is_typing_overload(value: Binding, scope_stack) -> bool: ...
def is_typing_overload(value: Binding, scope_stack: Sequence[Scope]) -> bool: ...
class AnnotationState:
NONE: ClassVar[Literal[0]]
@@ -165,22 +175,26 @@ else:
if sys.version_info >= (3, 12):
_TypeVar: TypeAlias = ast.TypeVar
_ParamSpec: TypeAlias = ast.ParamSpec
_TypeVarTuple: TypeAlias = ast.TypeVarTuple
_TypeAlias: TypeAlias = ast.TypeAlias
else:
# The methods using these should never be called on Python < 3.12.
_TypeVar: TypeAlias = Never
_ParamSpec: TypeAlias = Never
_TypeVarTuple: TypeAlias = Never
_TypeAlias: TypeAlias = Never
class Checker:
nodeDepth: int
offset: tuple[int, int] | None
builtIns: set[str]
deadScopes: list[Incomplete]
messages: list[Incomplete]
deadScopes: list[Scope]
messages: list[Message]
filename: str
withDoctest: bool
scopeStack: list[Scope]
exceptHandlers: list[Incomplete]
exceptHandlers: list[tuple[()] | str]
root: ast.AST
def __init__(
self,
@@ -188,7 +202,7 @@ class Checker:
filename: str = "(none)",
builtins: Iterable[str] | None = None,
withDoctest: bool = False,
file_tokens: tuple[Incomplete, ...] = (),
file_tokens: Unused = (),
) -> None: ...
def deferFunction(self, callable: _AnyFunction) -> None: ...
@property
@@ -211,15 +225,15 @@ class Checker:
def getScopeNode(self, node: ast.AST) -> ast.AST | None: ...
def differentForks(self, lnode: ast.AST, rnode: ast.AST) -> bool: ...
def addBinding(self, node: ast.AST, value: Binding) -> None: ...
def getNodeHandler(self, node_class: type[ast.AST]): ...
def handleNodeLoad(self, node: ast.AST, parent: ast.AST) -> None: ...
def getNodeHandler(self, node_class: type[ast.AST]) -> Callable[[ast.AST], None]: ...
def handleNodeLoad(self, node: ast.AST, parent: ast.AST | None) -> None: ...
def handleNodeStore(self, node: ast.AST) -> None: ...
def handleNodeDelete(self, node: ast.AST) -> None: ...
def handleChildren(self, tree: ast.AST, omit: _OmitType = None) -> None: ...
def isLiteralTupleUnpacking(self, node: ast.AST) -> bool | None: ...
def isDocstring(self, node: ast.AST) -> bool: ...
def getDocstring(self, node: ast.AST) -> tuple[str, int] | tuple[None, None]: ...
def handleNode(self, node: ast.AST | None, parent) -> None: ...
def handleNode(self, node: ast.AST | None, parent: ast.AST | None) -> None: ...
def handleDoctests(self, node: ast.AST) -> None: ...
def handleStringAnnotation(self, s: str, node: ast.AST, ref_lineno: int, ref_col_offset: int, err: type[Message]) -> None: ...
def handle_annotation_always_deferred(self, annotation: ast.AST, parent: ast.AST) -> None: ...
@@ -311,13 +325,18 @@ class Checker:
def LAMBDA(self, node: ast.Lambda) -> None: ...
def ARGUMENTS(self, node: ast.arguments) -> None: ...
def ARG(self, node: ast.arg) -> None: ...
def CLASSDEF(self, node: ast.ClassDef): ...
def CLASSDEF(self, node: ast.ClassDef) -> None: ...
def AUGASSIGN(self, node: ast.AugAssign) -> None: ...
def TUPLE(self, node: ast.Tuple) -> None: ...
def LIST(self, node: ast.List) -> None: ...
def IMPORT(self, node: ast.Import) -> None: ...
def IMPORTFROM(self, node: ast.ImportFrom) -> None: ...
def TRY(self, node: ast.Try) -> None: ...
if sys.version_info >= (3, 11):
def TRYSTAR(self, node: ast.TryStar) -> None: ...
else:
def TRYSTAR(self, node: ast.Try) -> None: ...
def EXCEPTHANDLER(self, node: ast.ExceptHandler) -> None: ...
def ANNASSIGN(self, node: ast.AnnAssign) -> None: ...
def COMPARE(self, node: ast.Compare) -> None: ...
@@ -332,4 +351,6 @@ class Checker:
def MATCHMAPPING(self, node: _MatchMapping) -> None: ...
def MATCHSTAR(self, node: _MatchStar) -> None: ...
def TYPEVAR(self, node: _TypeVar) -> None: ...
def PARAMSPEC(self, node: _ParamSpec) -> None: ...
def TYPEVARTUPLE(self, node: _TypeVarTuple) -> None: ...
def TYPEALIAS(self, node: _TypeAlias) -> None: ...
+48 -49
View File
@@ -1,5 +1,4 @@
import ast
from _typeshed import Incomplete
from typing import Any, ClassVar
class Message:
@@ -11,74 +10,74 @@ class Message:
def __init__(self, filename: str, loc: ast.AST) -> None: ...
class UnusedImport(Message):
message_args: tuple[Incomplete]
def __init__(self, filename: str, loc: ast.AST, name) -> None: ...
message_args: tuple[str]
def __init__(self, filename: str, loc: ast.AST, name: str) -> None: ...
class RedefinedWhileUnused(Message):
message_args: tuple[Incomplete, int]
def __init__(self, filename: str, loc: ast.AST, name, orig_loc: ast.AST) -> None: ...
message_args: tuple[str, int]
def __init__(self, filename: str, loc: ast.AST, name: str, orig_loc: ast.AST) -> None: ...
class ImportShadowedByLoopVar(Message):
message_args: tuple[Incomplete, int]
def __init__(self, filename: str, loc: ast.AST, name, orig_loc: ast.AST) -> None: ...
message_args: tuple[str, int]
def __init__(self, filename: str, loc: ast.AST, name: str, orig_loc: ast.AST) -> None: ...
class ImportStarNotPermitted(Message):
message_args: Incomplete
def __init__(self, filename: str, loc, modname) -> None: ...
message_args: tuple[str]
def __init__(self, filename: str, loc: ast.AST, modname: str) -> None: ...
class ImportStarUsed(Message):
message_args: tuple[Incomplete]
def __init__(self, filename: str, loc: ast.AST, modname) -> None: ...
message_args: tuple[str]
def __init__(self, filename: str, loc: ast.AST, modname: str) -> None: ...
class ImportStarUsage(Message):
message_args: tuple[Incomplete, Incomplete]
def __init__(self, filename: str, loc: ast.AST, name, from_list) -> None: ...
message_args: tuple[str, str]
def __init__(self, filename: str, loc: ast.AST, name: str, from_list: str) -> None: ...
class UndefinedName(Message):
message_args: tuple[Incomplete]
def __init__(self, filename: str, loc: ast.AST, name) -> None: ...
message_args: tuple[str]
def __init__(self, filename: str, loc: ast.AST, name: str) -> None: ...
class DoctestSyntaxError(Message):
message_args: tuple[()]
def __init__(self, filename: str, loc: ast.AST, position: tuple[int, int] | None = None) -> None: ...
class UndefinedExport(Message):
message_args: tuple[Incomplete]
def __init__(self, filename: str, loc: ast.AST, name) -> None: ...
message_args: tuple[str]
def __init__(self, filename: str, loc: ast.AST, name: str) -> None: ...
class UndefinedLocal(Message):
default: ClassVar[str]
builtin: ClassVar[str]
message_args: tuple[Incomplete, int]
def __init__(self, filename: str, loc: ast.AST, name, orig_loc: ast.AST) -> None: ...
message_args: tuple[str, int]
def __init__(self, filename: str, loc: ast.AST, name: str, orig_loc: ast.AST) -> None: ...
class DuplicateArgument(Message):
message_args: tuple[Incomplete]
def __init__(self, filename: str, loc: ast.AST, name) -> None: ...
message_args: tuple[str]
def __init__(self, filename: str, loc: ast.AST, name: str) -> None: ...
class MultiValueRepeatedKeyLiteral(Message):
message_args: tuple[Incomplete]
def __init__(self, filename: str, loc: ast.AST, key) -> None: ...
message_args: tuple[str]
def __init__(self, filename: str, loc: ast.AST, key: str) -> None: ...
class MultiValueRepeatedKeyVariable(Message):
message_args: tuple[Incomplete]
def __init__(self, filename: str, loc: ast.AST, key) -> None: ...
message_args: tuple[str]
def __init__(self, filename: str, loc: ast.AST, key: str) -> None: ...
class LateFutureImport(Message):
message_args: tuple[()]
def __init__(self, filename: str, loc: ast.AST) -> None: ...
class FutureFeatureNotDefined(Message):
message_args: tuple[Incomplete]
def __init__(self, filename: str, loc: ast.AST, name) -> None: ...
message_args: tuple[str]
def __init__(self, filename: str, loc: ast.AST, name: str) -> None: ...
class UnusedVariable(Message):
message_args: tuple[Incomplete]
def __init__(self, filename: str, loc: ast.AST, names) -> None: ...
message_args: tuple[str]
def __init__(self, filename: str, loc: ast.AST, names: str) -> None: ...
class UnusedAnnotation(Message):
message_args: tuple[Incomplete]
def __init__(self, filename: str, loc: ast.AST, names) -> None: ...
message_args: tuple[str]
def __init__(self, filename: str, loc: ast.AST, names: str) -> None: ...
class UnusedIndirectAssignment(Message):
message_args: tuple[str, str]
@@ -95,8 +94,8 @@ class IfTuple(Message): ...
class AssertTuple(Message): ...
class ForwardAnnotationSyntaxError(Message):
message_args: tuple[Incomplete]
def __init__(self, filename: str, loc: ast.AST, annotation) -> None: ...
message_args: tuple[str]
def __init__(self, filename: str, loc: ast.AST, annotation: str) -> None: ...
class RaiseNotImplemented(Message): ...
class InvalidPrintSyntax(Message): ...
@@ -104,44 +103,44 @@ class IsLiteral(Message): ...
class FStringMissingPlaceholders(Message): ...
class StringDotFormatExtraPositionalArguments(Message):
message_args: tuple[Incomplete]
def __init__(self, filename: str, loc: ast.AST, extra_positions) -> None: ...
message_args: tuple[str]
def __init__(self, filename: str, loc: ast.AST, extra_positions: str) -> None: ...
class StringDotFormatExtraNamedArguments(Message):
message_args: tuple[Incomplete]
def __init__(self, filename: str, loc: ast.AST, extra_keywords) -> None: ...
message_args: tuple[str]
def __init__(self, filename: str, loc: ast.AST, extra_keywords: str) -> None: ...
class StringDotFormatMissingArgument(Message):
message_args: tuple[Incomplete]
def __init__(self, filename: str, loc: ast.AST, missing_arguments) -> None: ...
message_args: tuple[str]
def __init__(self, filename: str, loc: ast.AST, missing_arguments: str) -> None: ...
class StringDotFormatMixingAutomatic(Message): ...
class StringDotFormatInvalidFormat(Message):
message_args: tuple[Incomplete]
def __init__(self, filename: str, loc: ast.AST, error) -> None: ...
message_args: tuple[str] | tuple[Exception]
def __init__(self, filename: str, loc: ast.AST, error: str | Exception) -> None: ...
class PercentFormatInvalidFormat(Message):
message_args: tuple[Incomplete]
def __init__(self, filename: str, loc: ast.AST, error) -> None: ...
message_args: tuple[str] | tuple[Exception]
def __init__(self, filename: str, loc: ast.AST, error: str | Exception) -> None: ...
class PercentFormatMixedPositionalAndNamed(Message): ...
class PercentFormatUnsupportedFormatCharacter(Message):
message_args: tuple[Incomplete]
def __init__(self, filename: str, loc: ast.AST, c) -> None: ...
message_args: tuple[str]
def __init__(self, filename: str, loc: ast.AST, c: str) -> None: ...
class PercentFormatPositionalCountMismatch(Message):
message_args: tuple[int, int]
def __init__(self, filename: str, loc: ast.AST, n_placeholders: int, n_substitutions: int) -> None: ...
class PercentFormatExtraNamedArguments(Message):
message_args: tuple[Incomplete]
def __init__(self, filename: str, loc: ast.AST, extra_keywords) -> None: ...
message_args: tuple[str]
def __init__(self, filename: str, loc: ast.AST, extra_keywords: str) -> None: ...
class PercentFormatMissingArgument(Message):
message_args: tuple[Incomplete]
def __init__(self, filename: str, loc: ast.AST, missing_arguments) -> None: ...
message_args: tuple[str]
def __init__(self, filename: str, loc: ast.AST, missing_arguments: str) -> None: ...
class PercentFormatExpectedMapping(Message): ...
class PercentFormatExpectedSequence(Message): ...
+8 -4
View File
@@ -1,5 +1,9 @@
from _typeshed import SupportsWrite
from .messages import Message
class Reporter:
def __init__(self, warningStream, errorStream) -> None: ...
def unexpectedError(self, filename, msg) -> None: ...
def syntaxError(self, filename, msg, lineno, offset, text) -> None: ...
def flake(self, message) -> None: ...
def __init__(self, warningStream: SupportsWrite[str], errorStream: SupportsWrite[str]) -> None: ...
def unexpectedError(self, filename: str, msg: str) -> None: ...
def syntaxError(self, filename: str, msg: str, lineno: int, offset: int | None, text: str | None) -> None: ...
def flake(self, message: Message) -> None: ...