# HG changeset patch # User Pierre-Yves David # Date 1703073080 -3600 # Node ID 9d3721552b6cbf613f0089e9dd9fa87e88919a22 # Parent 58d39c7865e57df1efd2369b0fb955aed7162b11 pytype: import typing directly First we no longer needs the pycompat layer, second having the types imported in all case will allow to use them more directly in type annotation, something important to upgrade the old "type comment" to proper type annotation. A lot a stupid assert are needed to keep pyflakes happy. We should be able to remove most of them once the type comment have been upgraded. diff -r 58d39c7865e5 -r 9d3721552b6c mercurial/branchmap.py --- a/mercurial/branchmap.py Wed Nov 08 01:58:16 2023 +0100 +++ b/mercurial/branchmap.py Wed Dec 20 12:51:20 2023 +0100 @@ -13,47 +13,50 @@ hex, nullrev, ) + +from typing import ( + Any, + Callable, + Dict, + Iterable, + List, + Optional, + Set, + TYPE_CHECKING, + Tuple, + Union, +) + from . import ( encoding, error, obsolete, - pycompat, scmutil, util, ) + from .utils import ( repoviewutil, stringutil, ) -if pycompat.TYPE_CHECKING: - from typing import ( - Any, - Callable, - Dict, - Iterable, - List, - Optional, - Set, - Tuple, - Union, - ) +# keeps pyflakes happy +assert [ + Any, + Callable, + Dict, + Iterable, + List, + Optional, + Set, + Tuple, + Union, +] + +if TYPE_CHECKING: from . import localrepo - assert any( - ( - Any, - Callable, - Dict, - Iterable, - List, - Optional, - Set, - Tuple, - Union, - localrepo, - ) - ) + assert [localrepo] subsettable = repoviewutil.subsettable diff -r 58d39c7865e5 -r 9d3721552b6c mercurial/cmdutil.py --- a/mercurial/cmdutil.py Wed Nov 08 01:58:16 2023 +0100 +++ b/mercurial/cmdutil.py Wed Dec 20 12:51:20 2023 +0100 @@ -18,6 +18,7 @@ Dict, Iterable, Optional, + TYPE_CHECKING, cast, ) @@ -71,7 +72,7 @@ constants as revlog_constants, ) -if pycompat.TYPE_CHECKING: +if TYPE_CHECKING: from . import ( ui as uimod, ) diff -r 58d39c7865e5 -r 9d3721552b6c mercurial/encoding.py --- a/mercurial/encoding.py Wed Nov 08 01:58:16 2023 +0100 +++ b/mercurial/encoding.py Wed Dec 20 12:51:20 2023 +0100 @@ -9,8 +9,19 @@ import locale import os import re +import typing import unicodedata +from typing import ( + Any, + Callable, + List, + Text, + Type, + TypeVar, + Union, +) + from . import ( error, policy, @@ -19,22 +30,11 @@ from .pure import charencode as charencodepure -if pycompat.TYPE_CHECKING: - from typing import ( - Any, - Callable, - List, - Text, - Type, - TypeVar, - Union, - ) +# keep pyflakes happy +for t in (Any, Callable, List, Text, Type, Union): + assert t - # keep pyflakes happy - for t in (Any, Callable, List, Text, Type, Union): - assert t - - _Tlocalstr = TypeVar('_Tlocalstr', bound='localstr') +_Tlocalstr = TypeVar('_Tlocalstr', bound='localstr') charencode = policy.importmod('charencode') @@ -131,7 +131,7 @@ s._utf8 = u return s - if pycompat.TYPE_CHECKING: + if typing.TYPE_CHECKING: # pseudo implementation to help pytype see localstr() constructor def __init__(self, u, l): # type: (bytes, bytes) -> None diff -r 58d39c7865e5 -r 9d3721552b6c mercurial/error.py --- a/mercurial/error.py Wed Nov 08 01:58:16 2023 +0100 +++ b/mercurial/error.py Wed Dec 20 12:51:20 2023 +0100 @@ -14,19 +14,30 @@ import difflib +from typing import ( + Any, + AnyStr, + Iterable, + List, + Optional, + Sequence, + Union, +) + # Do not import anything but pycompat here, please from . import pycompat -if pycompat.TYPE_CHECKING: - from typing import ( - Any, - AnyStr, - Iterable, - List, - Optional, - Sequence, - Union, - ) + +# keeps pyflakes happy +assert [ + Any, + AnyStr, + Iterable, + List, + Optional, + Sequence, + Union, +] def _tobytes(exc): diff -r 58d39c7865e5 -r 9d3721552b6c mercurial/i18n.py --- a/mercurial/i18n.py Wed Nov 08 01:58:16 2023 +0100 +++ b/mercurial/i18n.py Wed Dec 20 12:51:20 2023 +0100 @@ -11,18 +11,22 @@ import os import sys +from typing import ( + Callable, + List, +) + from .utils import resourceutil from . import ( encoding, pycompat, ) -if pycompat.TYPE_CHECKING: - from typing import ( - Callable, - List, - ) - +# keeps pyflakes happy +assert [ + Callable, + List, +] # modelled after templater.templatepath: if getattr(sys, 'frozen', None) is not None: diff -r 58d39c7865e5 -r 9d3721552b6c mercurial/logcmdutil.py --- a/mercurial/logcmdutil.py Wed Nov 08 01:58:16 2023 +0100 +++ b/mercurial/logcmdutil.py Wed Dec 20 12:51:20 2023 +0100 @@ -10,6 +10,15 @@ import os import posixpath +from typing import ( + Any, + Callable, + Dict, + Optional, + Sequence, + Tuple, +) + from .i18n import _ from .node import wdirrev @@ -39,19 +48,19 @@ stringutil, ) +# keeps pyflakes happy +assert [ + Any, + Callable, + Dict, + Optional, + Sequence, + Tuple, +] -if pycompat.TYPE_CHECKING: - from typing import ( - Any, - Callable, - Dict, - Optional, - Sequence, - Tuple, - ) - - for t in (Any, Callable, Dict, Optional, Tuple): - assert t +# keep pyflakes happy +for t in (Any, Callable, Dict, Optional, Tuple): + assert t def getlimit(opts): diff -r 58d39c7865e5 -r 9d3721552b6c mercurial/mail.py --- a/mercurial/mail.py Wed Nov 08 01:58:16 2023 +0100 +++ b/mercurial/mail.py Wed Dec 20 12:51:20 2023 +0100 @@ -18,6 +18,13 @@ import socket import time +from typing import ( + Any, + List, + Tuple, + Union, +) + from .i18n import _ from .pycompat import ( open, @@ -35,11 +42,14 @@ urlutil, ) -if pycompat.TYPE_CHECKING: - from typing import Any, List, Tuple, Union - # keep pyflakes happy - assert all((Any, List, Tuple, Union)) +# keep pyflakes happy +assert [ + Any, + List, + Tuple, + Union, +] class STARTTLS(smtplib.SMTP): diff -r 58d39c7865e5 -r 9d3721552b6c mercurial/pathutil.py --- a/mercurial/pathutil.py Wed Nov 08 01:58:16 2023 +0100 +++ b/mercurial/pathutil.py Wed Dec 20 12:51:20 2023 +0100 @@ -23,6 +23,14 @@ rustdirs = policy.importrust('dirstate', 'Dirs') parsers = policy.importmod('parsers') +# keeps pyflakes happy +assert [ + Any, + Callable, + Iterator, + Optional, +] + def _lowerclean(s): # type: (bytes) -> bytes diff -r 58d39c7865e5 -r 9d3721552b6c mercurial/phases.py --- a/mercurial/phases.py Wed Nov 08 01:58:16 2023 +0100 +++ b/mercurial/phases.py Wed Dec 20 12:51:20 2023 +0100 @@ -102,6 +102,18 @@ import struct +import typing + +from typing import ( + Any, + Callable, + Dict, + Iterable, + List, + Optional, + Set, + Tuple, +) from .i18n import _ from .node import ( @@ -120,23 +132,29 @@ util, ) -if pycompat.TYPE_CHECKING: - from typing import ( - Any, - Callable, - Dict, - Iterable, - List, - Optional, - Set, - Tuple, - ) +# keeps pyflakes happy +assert [ + Any, + Callable, + Dict, + Iterable, + List, + Optional, + Set, + Tuple, +] + +Phaseroots = Dict[int, Set[bytes]] + +if typing.TYPE_CHECKING: from . import ( localrepo, ui as uimod, ) - Phaseroots = Dict[int, Set[bytes]] + # keeps pyflakes happy + assert [uimod] + Phasedefaults = List[ Callable[[localrepo.localrepository, Phaseroots], Phaseroots] ] diff -r 58d39c7865e5 -r 9d3721552b6c mercurial/posix.py --- a/mercurial/posix.py Wed Nov 08 01:58:16 2023 +0100 +++ b/mercurial/posix.py Wed Dec 20 12:51:20 2023 +0100 @@ -70,13 +70,6 @@ removedirs = os.removedirs if typing.TYPE_CHECKING: - # Replace the various overloads that come along with aliasing stdlib methods - # with the narrow definition that we care about in the type checking phase - # only. This ensures that both Windows and POSIX see only the definition - # that is actually available. - # - # Note that if we check pycompat.TYPE_CHECKING here, it is always False, and - # the methods aren't replaced. def normpath(path: bytes) -> bytes: raise NotImplementedError diff -r 58d39c7865e5 -r 9d3721552b6c mercurial/scmposix.py --- a/mercurial/scmposix.py Wed Nov 08 01:58:16 2023 +0100 +++ b/mercurial/scmposix.py Wed Dec 20 12:51:20 2023 +0100 @@ -3,6 +3,7 @@ import fcntl import os import sys +import typing from typing import ( List, @@ -15,7 +16,7 @@ util, ) -if pycompat.TYPE_CHECKING: +if typing.TYPE_CHECKING: from . import ui as uimod # BSD 'more' escapes ANSI color sequences by default. This can be disabled by diff -r 58d39c7865e5 -r 9d3721552b6c mercurial/scmwindows.py --- a/mercurial/scmwindows.py Wed Nov 08 01:58:16 2023 +0100 +++ b/mercurial/scmwindows.py Wed Dec 20 12:51:20 2023 +0100 @@ -3,6 +3,7 @@ from typing import ( List, + TYPE_CHECKING, Tuple, ) @@ -13,7 +14,7 @@ win32, ) -if pycompat.TYPE_CHECKING: +if TYPE_CHECKING: from . import ui as uimod # MS-DOS 'more' is the only pager available by default on Windows. diff -r 58d39c7865e5 -r 9d3721552b6c mercurial/state.py --- a/mercurial/state.py Wed Nov 08 01:58:16 2023 +0100 +++ b/mercurial/state.py Wed Dec 20 12:51:20 2023 +0100 @@ -20,23 +20,22 @@ import contextlib +from typing import ( + Any, + Dict, +) + from .i18n import _ from . import ( error, - pycompat, util, ) from .utils import cborutil -if pycompat.TYPE_CHECKING: - from typing import ( - Any, - Dict, - ) - - for t in (Any, Dict): - assert t +# keeps pyflakes happy +for t in (Any, Dict): + assert t class cmdstate: diff -r 58d39c7865e5 -r 9d3721552b6c mercurial/subrepoutil.py --- a/mercurial/subrepoutil.py Wed Nov 08 01:58:16 2023 +0100 +++ b/mercurial/subrepoutil.py Wed Dec 20 12:51:20 2023 +0100 @@ -9,6 +9,16 @@ import os import posixpath import re +import typing + +from typing import ( + Any, + Dict, + List, + Optional, + Set, + Tuple, +) from .i18n import _ from . import ( @@ -17,7 +27,6 @@ filemerge, pathutil, phases, - pycompat, util, ) from .utils import ( @@ -25,17 +34,19 @@ urlutil, ) +# keeps pyflakes happy +assert [ + Any, + Dict, + List, + Optional, + Set, + Tuple, +] + nullstate = (b'', b'', b'empty') -if pycompat.TYPE_CHECKING: - from typing import ( - Any, - Dict, - List, - Optional, - Set, - Tuple, - ) +if typing.TYPE_CHECKING: from . import ( context, localrepo, @@ -45,7 +56,17 @@ ui as uimod, ) - Substate = Dict[bytes, Tuple[bytes, bytes, bytes]] + # keeps pyflakes happy + assert [ + context, + localrepo, + matchmod, + scmutil, + subrepo, + uimod, + ] + +Substate = Dict[bytes, Tuple[bytes, bytes, bytes]] def state(ctx, ui): diff -r 58d39c7865e5 -r 9d3721552b6c mercurial/ui.py --- a/mercurial/ui.py Wed Nov 08 01:58:16 2023 +0100 +++ b/mercurial/ui.py Wed Dec 20 12:51:20 2023 +0100 @@ -18,6 +18,7 @@ import subprocess import sys import traceback +import typing from typing import ( Any, @@ -1766,7 +1767,7 @@ return line - if pycompat.TYPE_CHECKING: + if typing.TYPE_CHECKING: @overload def prompt(self, msg: bytes, default: bytes) -> bytes: @@ -1782,7 +1783,7 @@ """ return self._prompt(msg, default=default) - if pycompat.TYPE_CHECKING: + if typing.TYPE_CHECKING: @overload def _prompt( diff -r 58d39c7865e5 -r 9d3721552b6c mercurial/upgrade_utils/actions.py --- a/mercurial/upgrade_utils/actions.py Wed Nov 08 01:58:16 2023 +0100 +++ b/mercurial/upgrade_utils/actions.py Wed Dec 20 12:51:20 2023 +0100 @@ -7,11 +7,15 @@ import random +from typing import ( + List, + Type, +) + from ..i18n import _ from .. import ( error, localrepo, - pycompat, requirements, revlog, util, @@ -19,12 +23,11 @@ from ..utils import compression -if pycompat.TYPE_CHECKING: - from typing import ( - List, - Type, - ) - +# keeps pyflakes happy +assert [ + List, + Type, +] # list of requirements that request a clone of all revlog if added/removed RECLONES_REQUIREMENTS = { diff -r 58d39c7865e5 -r 9d3721552b6c mercurial/util.py --- a/mercurial/util.py Wed Nov 08 01:58:16 2023 +0100 +++ b/mercurial/util.py Wed Dec 20 12:51:20 2023 +0100 @@ -34,6 +34,14 @@ import traceback import warnings +from typing import ( + Iterable, + Iterator, + List, + Optional, + Tuple, +) + from .node import hex from .thirdparty import attr from .pycompat import ( @@ -55,14 +63,14 @@ stringutil, ) -if pycompat.TYPE_CHECKING: - from typing import ( - Iterable, - Iterator, - List, - Optional, - Tuple, - ) +# keeps pyflakes happy +assert [ + Iterable, + Iterator, + List, + Optional, + Tuple, +] base85 = policy.importmod('base85') diff -r 58d39c7865e5 -r 9d3721552b6c mercurial/utils/dateutil.py --- a/mercurial/utils/dateutil.py Wed Nov 08 01:58:16 2023 +0100 +++ b/mercurial/utils/dateutil.py Wed Dec 20 12:51:20 2023 +0100 @@ -10,6 +10,15 @@ import datetime import time +from typing import ( + Callable, + Dict, + Iterable, + Optional, + Tuple, + Union, +) + from ..i18n import _ from .. import ( encoding, @@ -17,17 +26,17 @@ pycompat, ) -if pycompat.TYPE_CHECKING: - from typing import ( - Callable, - Dict, - Iterable, - Optional, - Tuple, - Union, - ) +# keeps pyflakes happy +assert [ + Callable, + Dict, + Iterable, + Optional, + Tuple, + Union, +] - hgdate = Tuple[float, int] # (unixtime, offset) +hgdate = Tuple[float, int] # (unixtime, offset) # used by parsedate defaultdateformats = ( diff -r 58d39c7865e5 -r 9d3721552b6c mercurial/utils/urlutil.py --- a/mercurial/utils/urlutil.py Wed Nov 08 01:58:16 2023 +0100 +++ b/mercurial/utils/urlutil.py Wed Dec 20 12:51:20 2023 +0100 @@ -8,6 +8,10 @@ import re as remod import socket +from typing import ( + Union, +) + from ..i18n import _ from .. import ( encoding, @@ -24,11 +28,8 @@ constants as revlog_constants, ) - -if pycompat.TYPE_CHECKING: - from typing import ( - Union, - ) +# keeps pyflakes happy +assert [Union] urlreq = urllibcompat.urlreq diff -r 58d39c7865e5 -r 9d3721552b6c mercurial/windows.py --- a/mercurial/windows.py Wed Nov 08 01:58:16 2023 +0100 +++ b/mercurial/windows.py Wed Dec 20 12:51:20 2023 +0100 @@ -61,13 +61,7 @@ unlink = win32.unlink if typing.TYPE_CHECKING: - # Replace the various overloads that come along with aliasing stdlib methods - # with the narrow definition that we care about in the type checking phase - # only. This ensures that both Windows and POSIX see only the definition - # that is actually available. - # - # Note that if we check pycompat.TYPE_CHECKING here, it is always False, and - # the methods aren't replaced. + def split(p: bytes) -> Tuple[bytes, bytes]: raise NotImplementedError