mypy-dev 1.9.0.dev0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mypy/__init__.py +1 -0
- mypy/__main__.py +37 -0
- mypy/api.py +94 -0
- mypy/applytype.py +156 -0
- mypy/argmap.py +268 -0
- mypy/binder.py +538 -0
- mypy/bogus_type.py +27 -0
- mypy/build.py +3562 -0
- mypy/checker.py +8372 -0
- mypy/checkexpr.py +6615 -0
- mypy/checkmember.py +1356 -0
- mypy/checkpattern.py +801 -0
- mypy/checkstrformat.py +1109 -0
- mypy/config_parser.py +670 -0
- mypy/constant_fold.py +187 -0
- mypy/constraints.py +1624 -0
- mypy/copytype.py +133 -0
- mypy/defaults.py +46 -0
- mypy/dmypy/__init__.py +0 -0
- mypy/dmypy/__main__.py +6 -0
- mypy/dmypy/client.py +749 -0
- mypy/dmypy_os.py +42 -0
- mypy/dmypy_server.py +1107 -0
- mypy/dmypy_util.py +117 -0
- mypy/erasetype.py +278 -0
- mypy/errorcodes.py +285 -0
- mypy/errors.py +1280 -0
- mypy/evalexpr.py +205 -0
- mypy/expandtype.py +510 -0
- mypy/exprtotype.py +206 -0
- mypy/fastparse.py +2147 -0
- mypy/find_sources.py +243 -0
- mypy/fixup.py +426 -0
- mypy/freetree.py +23 -0
- mypy/fscache.py +309 -0
- mypy/fswatcher.py +106 -0
- mypy/gclogger.py +47 -0
- mypy/git.py +34 -0
- mypy/graph_utils.py +112 -0
- mypy/indirection.py +121 -0
- mypy/infer.py +75 -0
- mypy/inspections.py +627 -0
- mypy/ipc.py +310 -0
- mypy/join.py +866 -0
- mypy/literals.py +306 -0
- mypy/lookup.py +61 -0
- mypy/main.py +1574 -0
- mypy/maptype.py +106 -0
- mypy/meet.py +1140 -0
- mypy/memprofile.py +121 -0
- mypy/message_registry.py +326 -0
- mypy/messages.py +3171 -0
- mypy/metastore.py +225 -0
- mypy/mixedtraverser.py +112 -0
- mypy/modulefinder.py +875 -0
- mypy/moduleinspect.py +184 -0
- mypy/mro.py +62 -0
- mypy/nodes.py +4112 -0
- mypy/operators.py +126 -0
- mypy/options.py +556 -0
- mypy/parse.py +30 -0
- mypy/partially_defined.py +675 -0
- mypy/patterns.py +150 -0
- mypy/plugin.py +901 -0
- mypy/plugins/__init__.py +0 -0
- mypy/plugins/attrs.py +1152 -0
- mypy/plugins/common.py +440 -0
- mypy/plugins/ctypes.py +245 -0
- mypy/plugins/dataclasses.py +1101 -0
- mypy/plugins/default.py +518 -0
- mypy/plugins/enums.py +259 -0
- mypy/plugins/functools.py +104 -0
- mypy/plugins/proper_plugin.py +175 -0
- mypy/plugins/singledispatch.py +224 -0
- mypy/py.typed +1 -0
- mypy/pyinfo.py +78 -0
- mypy/reachability.py +362 -0
- mypy/refinfo.py +92 -0
- mypy/renaming.py +568 -0
- mypy/report.py +924 -0
- mypy/scope.py +125 -0
- mypy/semanal.py +7023 -0
- mypy/semanal_classprop.py +187 -0
- mypy/semanal_enum.py +253 -0
- mypy/semanal_infer.py +128 -0
- mypy/semanal_main.py +511 -0
- mypy/semanal_namedtuple.py +670 -0
- mypy/semanal_newtype.py +273 -0
- mypy/semanal_pass1.py +156 -0
- mypy/semanal_shared.py +490 -0
- mypy/semanal_typeargs.py +265 -0
- mypy/semanal_typeddict.py +575 -0
- mypy/server/__init__.py +0 -0
- mypy/server/astdiff.py +518 -0
- mypy/server/astmerge.py +562 -0
- mypy/server/aststrip.py +281 -0
- mypy/server/deps.py +1137 -0
- mypy/server/mergecheck.py +83 -0
- mypy/server/objgraph.py +101 -0
- mypy/server/subexpr.py +198 -0
- mypy/server/target.py +11 -0
- mypy/server/trigger.py +26 -0
- mypy/server/update.py +1339 -0
- mypy/sharedparse.py +112 -0
- mypy/solve.py +562 -0
- mypy/split_namespace.py +35 -0
- mypy/state.py +28 -0
- mypy/stats.py +489 -0
- mypy/strconv.py +641 -0
- mypy/stubdoc.py +491 -0
- mypy/stubgen.py +1873 -0
- mypy/stubgenc.py +993 -0
- mypy/stubinfo.py +173 -0
- mypy/stubtest.py +2079 -0
- mypy/stubutil.py +807 -0
- mypy/subtypes.py +1967 -0
- mypy/suggestions.py +1046 -0
- mypy/test/__init__.py +0 -0
- mypy/test/config.py +28 -0
- mypy/test/data.py +823 -0
- mypy/test/helpers.py +476 -0
- mypy/test/meta/__init__.py +0 -0
- mypy/test/meta/_pytest.py +72 -0
- mypy/test/meta/test_diff_helper.py +47 -0
- mypy/test/meta/test_parse_data.py +73 -0
- mypy/test/meta/test_update_data.py +135 -0
- mypy/test/test_find_sources.py +376 -0
- mypy/test/test_ref_info.py +45 -0
- mypy/test/testapi.py +45 -0
- mypy/test/testargs.py +77 -0
- mypy/test/testcheck.py +322 -0
- mypy/test/testcmdline.py +152 -0
- mypy/test/testconstraints.py +134 -0
- mypy/test/testdaemon.py +132 -0
- mypy/test/testdeps.py +77 -0
- mypy/test/testdiff.py +67 -0
- mypy/test/testerrorstream.py +46 -0
- mypy/test/testfinegrained.py +438 -0
- mypy/test/testfinegrainedcache.py +18 -0
- mypy/test/testformatter.py +85 -0
- mypy/test/testfscache.py +101 -0
- mypy/test/testgraph.py +83 -0
- mypy/test/testinfer.py +373 -0
- mypy/test/testipc.py +119 -0
- mypy/test/testmerge.py +238 -0
- mypy/test/testmodulefinder.py +278 -0
- mypy/test/testmypyc.py +14 -0
- mypy/test/testparse.py +107 -0
- mypy/test/testpep561.py +211 -0
- mypy/test/testpythoneval.py +117 -0
- mypy/test/testreports.py +55 -0
- mypy/test/testsemanal.py +209 -0
- mypy/test/testsolve.py +285 -0
- mypy/test/teststubgen.py +1412 -0
- mypy/test/teststubinfo.py +12 -0
- mypy/test/teststubtest.py +2492 -0
- mypy/test/testsubtypes.py +303 -0
- mypy/test/testtransform.py +64 -0
- mypy/test/testtypegen.py +83 -0
- mypy/test/testtypes.py +1551 -0
- mypy/test/testutil.py +111 -0
- mypy/test/typefixture.py +415 -0
- mypy/test/update_data.py +87 -0
- mypy/test/visitors.py +63 -0
- mypy/traverser.py +961 -0
- mypy/treetransform.py +800 -0
- mypy/tvar_scope.py +147 -0
- mypy/type_visitor.py +564 -0
- mypy/typeanal.py +2510 -0
- mypy/typeops.py +1082 -0
- mypy/types.py +3686 -0
- mypy/types_utils.py +166 -0
- mypy/typeshed/LICENSE +237 -0
- mypy/typeshed/stdlib/VERSIONS +308 -0
- mypy/typeshed/stdlib/__future__.pyi +36 -0
- mypy/typeshed/stdlib/__main__.pyi +3 -0
- mypy/typeshed/stdlib/_ast.pyi +587 -0
- mypy/typeshed/stdlib/_bisect.pyi +84 -0
- mypy/typeshed/stdlib/_bootlocale.pyi +1 -0
- mypy/typeshed/stdlib/_codecs.pyi +133 -0
- mypy/typeshed/stdlib/_collections_abc.pyi +94 -0
- mypy/typeshed/stdlib/_compat_pickle.pyi +8 -0
- mypy/typeshed/stdlib/_compression.pyi +25 -0
- mypy/typeshed/stdlib/_csv.pyi +90 -0
- mypy/typeshed/stdlib/_ctypes.pyi +205 -0
- mypy/typeshed/stdlib/_curses.pyi +557 -0
- mypy/typeshed/stdlib/_decimal.pyi +281 -0
- mypy/typeshed/stdlib/_dummy_thread.pyi +27 -0
- mypy/typeshed/stdlib/_dummy_threading.pyi +164 -0
- mypy/typeshed/stdlib/_heapq.pyi +11 -0
- mypy/typeshed/stdlib/_imp.pyi +28 -0
- mypy/typeshed/stdlib/_json.pyi +49 -0
- mypy/typeshed/stdlib/_locale.pyi +100 -0
- mypy/typeshed/stdlib/_markupbase.pyi +16 -0
- mypy/typeshed/stdlib/_msi.pyi +91 -0
- mypy/typeshed/stdlib/_operator.pyi +147 -0
- mypy/typeshed/stdlib/_osx_support.pyi +34 -0
- mypy/typeshed/stdlib/_posixsubprocess.pyi +32 -0
- mypy/typeshed/stdlib/_py_abc.pyi +14 -0
- mypy/typeshed/stdlib/_pydecimal.pyi +43 -0
- mypy/typeshed/stdlib/_random.pyi +12 -0
- mypy/typeshed/stdlib/_sitebuiltins.pyi +16 -0
- mypy/typeshed/stdlib/_socket.pyi +802 -0
- mypy/typeshed/stdlib/_stat.pyi +103 -0
- mypy/typeshed/stdlib/_thread.pyi +52 -0
- mypy/typeshed/stdlib/_threading_local.pyi +17 -0
- mypy/typeshed/stdlib/_tkinter.pyi +120 -0
- mypy/typeshed/stdlib/_tracemalloc.pyi +17 -0
- mypy/typeshed/stdlib/_typeshed/__init__.pyi +347 -0
- mypy/typeshed/stdlib/_typeshed/dbapi.pyi +37 -0
- mypy/typeshed/stdlib/_typeshed/wsgi.pyi +44 -0
- mypy/typeshed/stdlib/_typeshed/xml.pyi +9 -0
- mypy/typeshed/stdlib/_warnings.pyi +55 -0
- mypy/typeshed/stdlib/_weakref.pyi +41 -0
- mypy/typeshed/stdlib/_weakrefset.pyi +51 -0
- mypy/typeshed/stdlib/_winapi.pyi +251 -0
- mypy/typeshed/stdlib/abc.pyi +49 -0
- mypy/typeshed/stdlib/aifc.pyi +91 -0
- mypy/typeshed/stdlib/antigravity.pyi +3 -0
- mypy/typeshed/stdlib/argparse.pyi +571 -0
- mypy/typeshed/stdlib/array.pyi +92 -0
- mypy/typeshed/stdlib/ast.pyi +277 -0
- mypy/typeshed/stdlib/asynchat.pyi +21 -0
- mypy/typeshed/stdlib/asyncio/__init__.pyi +41 -0
- mypy/typeshed/stdlib/asyncio/base_events.pyi +440 -0
- mypy/typeshed/stdlib/asyncio/base_futures.pyi +19 -0
- mypy/typeshed/stdlib/asyncio/base_subprocess.pyi +63 -0
- mypy/typeshed/stdlib/asyncio/base_tasks.pyi +9 -0
- mypy/typeshed/stdlib/asyncio/constants.pyi +20 -0
- mypy/typeshed/stdlib/asyncio/coroutines.pyi +26 -0
- mypy/typeshed/stdlib/asyncio/events.pyi +574 -0
- mypy/typeshed/stdlib/asyncio/exceptions.pyi +43 -0
- mypy/typeshed/stdlib/asyncio/format_helpers.pyi +20 -0
- mypy/typeshed/stdlib/asyncio/futures.pyi +57 -0
- mypy/typeshed/stdlib/asyncio/locks.pyi +121 -0
- mypy/typeshed/stdlib/asyncio/log.pyi +3 -0
- mypy/typeshed/stdlib/asyncio/mixins.pyi +9 -0
- mypy/typeshed/stdlib/asyncio/proactor_events.pyi +64 -0
- mypy/typeshed/stdlib/asyncio/protocols.pyi +34 -0
- mypy/typeshed/stdlib/asyncio/queues.pyi +47 -0
- mypy/typeshed/stdlib/asyncio/runners.pyi +32 -0
- mypy/typeshed/stdlib/asyncio/selector_events.pyi +8 -0
- mypy/typeshed/stdlib/asyncio/sslproto.pyi +163 -0
- mypy/typeshed/stdlib/asyncio/staggered.pyi +10 -0
- mypy/typeshed/stdlib/asyncio/streams.pyi +148 -0
- mypy/typeshed/stdlib/asyncio/subprocess.pyi +229 -0
- mypy/typeshed/stdlib/asyncio/taskgroups.pyi +25 -0
- mypy/typeshed/stdlib/asyncio/tasks.pyi +477 -0
- mypy/typeshed/stdlib/asyncio/threads.pyi +9 -0
- mypy/typeshed/stdlib/asyncio/timeouts.pyi +19 -0
- mypy/typeshed/stdlib/asyncio/transports.pyi +47 -0
- mypy/typeshed/stdlib/asyncio/trsock.pyi +98 -0
- mypy/typeshed/stdlib/asyncio/unix_events.pyi +173 -0
- mypy/typeshed/stdlib/asyncio/windows_events.pyi +83 -0
- mypy/typeshed/stdlib/asyncio/windows_utils.pyi +49 -0
- mypy/typeshed/stdlib/asyncore.pyi +90 -0
- mypy/typeshed/stdlib/atexit.pyi +12 -0
- mypy/typeshed/stdlib/audioop.pyi +42 -0
- mypy/typeshed/stdlib/base64.pyi +59 -0
- mypy/typeshed/stdlib/bdb.pyi +102 -0
- mypy/typeshed/stdlib/binascii.pyi +36 -0
- mypy/typeshed/stdlib/binhex.pyi +45 -0
- mypy/typeshed/stdlib/bisect.pyi +4 -0
- mypy/typeshed/stdlib/builtins.pyi +1937 -0
- mypy/typeshed/stdlib/bz2.pyi +146 -0
- mypy/typeshed/stdlib/cProfile.pyi +35 -0
- mypy/typeshed/stdlib/calendar.pyi +206 -0
- mypy/typeshed/stdlib/cgi.pyi +118 -0
- mypy/typeshed/stdlib/cgitb.pyi +32 -0
- mypy/typeshed/stdlib/chunk.pyi +20 -0
- mypy/typeshed/stdlib/cmath.pyi +36 -0
- mypy/typeshed/stdlib/cmd.pyi +45 -0
- mypy/typeshed/stdlib/code.pyi +33 -0
- mypy/typeshed/stdlib/codecs.pyi +285 -0
- mypy/typeshed/stdlib/codeop.pyi +13 -0
- mypy/typeshed/stdlib/collections/__init__.pyi +477 -0
- mypy/typeshed/stdlib/collections/abc.pyi +2 -0
- mypy/typeshed/stdlib/colorsys.pyi +13 -0
- mypy/typeshed/stdlib/compileall.pyi +111 -0
- mypy/typeshed/stdlib/concurrent/__init__.pyi +0 -0
- mypy/typeshed/stdlib/concurrent/futures/__init__.pyi +32 -0
- mypy/typeshed/stdlib/concurrent/futures/_base.pyi +120 -0
- mypy/typeshed/stdlib/concurrent/futures/process.pyi +233 -0
- mypy/typeshed/stdlib/concurrent/futures/thread.pyi +80 -0
- mypy/typeshed/stdlib/configparser.pyi +313 -0
- mypy/typeshed/stdlib/contextlib.pyi +207 -0
- mypy/typeshed/stdlib/contextvars.pyi +63 -0
- mypy/typeshed/stdlib/copy.pyi +16 -0
- mypy/typeshed/stdlib/copyreg.pyi +21 -0
- mypy/typeshed/stdlib/crypt.pyi +12 -0
- mypy/typeshed/stdlib/csv.pyi +147 -0
- mypy/typeshed/stdlib/ctypes/__init__.pyi +187 -0
- mypy/typeshed/stdlib/ctypes/_endian.pyi +19 -0
- mypy/typeshed/stdlib/ctypes/util.pyi +6 -0
- mypy/typeshed/stdlib/ctypes/wintypes.pyi +298 -0
- mypy/typeshed/stdlib/curses/__init__.pyi +21 -0
- mypy/typeshed/stdlib/curses/ascii.pyi +63 -0
- mypy/typeshed/stdlib/curses/has_key.pyi +4 -0
- mypy/typeshed/stdlib/curses/panel.pyi +25 -0
- mypy/typeshed/stdlib/curses/textpad.pyi +13 -0
- mypy/typeshed/stdlib/dataclasses.pyi +313 -0
- mypy/typeshed/stdlib/datetime.pyi +295 -0
- mypy/typeshed/stdlib/dbm/__init__.pyi +95 -0
- mypy/typeshed/stdlib/dbm/dumb.pyi +31 -0
- mypy/typeshed/stdlib/dbm/gnu.pyi +40 -0
- mypy/typeshed/stdlib/dbm/ndbm.pyi +36 -0
- mypy/typeshed/stdlib/decimal.pyi +2 -0
- mypy/typeshed/stdlib/difflib.pyi +140 -0
- mypy/typeshed/stdlib/dis.pyi +144 -0
- mypy/typeshed/stdlib/distutils/__init__.pyi +5 -0
- mypy/typeshed/stdlib/distutils/archive_util.pyi +20 -0
- mypy/typeshed/stdlib/distutils/bcppcompiler.pyi +3 -0
- mypy/typeshed/stdlib/distutils/ccompiler.pyi +152 -0
- mypy/typeshed/stdlib/distutils/cmd.pyi +66 -0
- mypy/typeshed/stdlib/distutils/command/__init__.pyi +0 -0
- mypy/typeshed/stdlib/distutils/command/bdist.pyi +25 -0
- mypy/typeshed/stdlib/distutils/command/bdist_dumb.pyi +21 -0
- mypy/typeshed/stdlib/distutils/command/bdist_msi.pyi +45 -0
- mypy/typeshed/stdlib/distutils/command/bdist_packager.pyi +0 -0
- mypy/typeshed/stdlib/distutils/command/bdist_rpm.pyi +52 -0
- mypy/typeshed/stdlib/distutils/command/bdist_wininst.pyi +16 -0
- mypy/typeshed/stdlib/distutils/command/build.pyi +31 -0
- mypy/typeshed/stdlib/distutils/command/build_clib.pyi +27 -0
- mypy/typeshed/stdlib/distutils/command/build_ext.pyi +50 -0
- mypy/typeshed/stdlib/distutils/command/build_py.pyi +44 -0
- mypy/typeshed/stdlib/distutils/command/build_scripts.pyi +24 -0
- mypy/typeshed/stdlib/distutils/command/check.pyi +39 -0
- mypy/typeshed/stdlib/distutils/command/clean.pyi +17 -0
- mypy/typeshed/stdlib/distutils/command/config.pyi +83 -0
- mypy/typeshed/stdlib/distutils/command/install.pyi +63 -0
- mypy/typeshed/stdlib/distutils/command/install_data.pyi +19 -0
- mypy/typeshed/stdlib/distutils/command/install_egg_info.pyi +18 -0
- mypy/typeshed/stdlib/distutils/command/install_headers.pyi +16 -0
- mypy/typeshed/stdlib/distutils/command/install_lib.pyi +25 -0
- mypy/typeshed/stdlib/distutils/command/install_scripts.pyi +18 -0
- mypy/typeshed/stdlib/distutils/command/register.pyi +18 -0
- mypy/typeshed/stdlib/distutils/command/sdist.pyi +42 -0
- mypy/typeshed/stdlib/distutils/command/upload.pyi +17 -0
- mypy/typeshed/stdlib/distutils/config.pyi +17 -0
- mypy/typeshed/stdlib/distutils/core.pyi +57 -0
- mypy/typeshed/stdlib/distutils/cygwinccompiler.pyi +20 -0
- mypy/typeshed/stdlib/distutils/debug.pyi +1 -0
- mypy/typeshed/stdlib/distutils/dep_util.pyi +3 -0
- mypy/typeshed/stdlib/distutils/dir_util.pyi +13 -0
- mypy/typeshed/stdlib/distutils/dist.pyi +146 -0
- mypy/typeshed/stdlib/distutils/errors.pyi +19 -0
- mypy/typeshed/stdlib/distutils/extension.pyi +36 -0
- mypy/typeshed/stdlib/distutils/fancy_getopt.pyi +34 -0
- mypy/typeshed/stdlib/distutils/file_util.pyi +14 -0
- mypy/typeshed/stdlib/distutils/filelist.pyi +50 -0
- mypy/typeshed/stdlib/distutils/log.pyi +25 -0
- mypy/typeshed/stdlib/distutils/msvccompiler.pyi +3 -0
- mypy/typeshed/stdlib/distutils/spawn.pyi +2 -0
- mypy/typeshed/stdlib/distutils/sysconfig.pyi +22 -0
- mypy/typeshed/stdlib/distutils/text_file.pyi +21 -0
- mypy/typeshed/stdlib/distutils/unixccompiler.pyi +3 -0
- mypy/typeshed/stdlib/distutils/util.pyi +46 -0
- mypy/typeshed/stdlib/distutils/version.pyi +36 -0
- mypy/typeshed/stdlib/doctest.pyi +248 -0
- mypy/typeshed/stdlib/dummy_threading.pyi +2 -0
- mypy/typeshed/stdlib/email/__init__.pyi +29 -0
- mypy/typeshed/stdlib/email/_header_value_parser.pyi +392 -0
- mypy/typeshed/stdlib/email/_policybase.pyi +51 -0
- mypy/typeshed/stdlib/email/base64mime.pyi +13 -0
- mypy/typeshed/stdlib/email/charset.pyi +34 -0
- mypy/typeshed/stdlib/email/contentmanager.pyi +11 -0
- mypy/typeshed/stdlib/email/encoders.pyi +8 -0
- mypy/typeshed/stdlib/email/errors.pyi +39 -0
- mypy/typeshed/stdlib/email/feedparser.pyi +23 -0
- mypy/typeshed/stdlib/email/generator.pyi +40 -0
- mypy/typeshed/stdlib/email/header.pyi +31 -0
- mypy/typeshed/stdlib/email/headerregistry.pyi +178 -0
- mypy/typeshed/stdlib/email/iterators.pyi +12 -0
- mypy/typeshed/stdlib/email/message.pyi +161 -0
- mypy/typeshed/stdlib/email/mime/__init__.pyi +0 -0
- mypy/typeshed/stdlib/email/mime/application.pyi +17 -0
- mypy/typeshed/stdlib/email/mime/audio.pyi +17 -0
- mypy/typeshed/stdlib/email/mime/base.pyi +8 -0
- mypy/typeshed/stdlib/email/mime/image.pyi +17 -0
- mypy/typeshed/stdlib/email/mime/message.pyi +8 -0
- mypy/typeshed/stdlib/email/mime/multipart.pyi +18 -0
- mypy/typeshed/stdlib/email/mime/nonmultipart.pyi +5 -0
- mypy/typeshed/stdlib/email/mime/text.pyi +9 -0
- mypy/typeshed/stdlib/email/parser.pyi +26 -0
- mypy/typeshed/stdlib/email/policy.pyi +38 -0
- mypy/typeshed/stdlib/email/quoprimime.pyi +28 -0
- mypy/typeshed/stdlib/email/utils.pyi +66 -0
- mypy/typeshed/stdlib/encodings/__init__.pyi +10 -0
- mypy/typeshed/stdlib/encodings/utf_8.pyi +21 -0
- mypy/typeshed/stdlib/encodings/utf_8_sig.pyi +22 -0
- mypy/typeshed/stdlib/ensurepip/__init__.pyi +12 -0
- mypy/typeshed/stdlib/enum.pyi +317 -0
- mypy/typeshed/stdlib/errno.pyi +222 -0
- mypy/typeshed/stdlib/faulthandler.pyi +13 -0
- mypy/typeshed/stdlib/fcntl.pyi +127 -0
- mypy/typeshed/stdlib/filecmp.pyi +57 -0
- mypy/typeshed/stdlib/fileinput.pyi +213 -0
- mypy/typeshed/stdlib/fnmatch.pyi +9 -0
- mypy/typeshed/stdlib/formatter.pyi +88 -0
- mypy/typeshed/stdlib/fractions.pyi +150 -0
- mypy/typeshed/stdlib/ftplib.pyi +178 -0
- mypy/typeshed/stdlib/functools.pyi +200 -0
- mypy/typeshed/stdlib/gc.pyi +37 -0
- mypy/typeshed/stdlib/genericpath.pyi +52 -0
- mypy/typeshed/stdlib/getopt.pyi +11 -0
- mypy/typeshed/stdlib/getpass.pyi +8 -0
- mypy/typeshed/stdlib/gettext.pyi +169 -0
- mypy/typeshed/stdlib/glob.pyi +42 -0
- mypy/typeshed/stdlib/graphlib.pyi +28 -0
- mypy/typeshed/stdlib/grp.pyi +21 -0
- mypy/typeshed/stdlib/gzip.pyi +160 -0
- mypy/typeshed/stdlib/hashlib.pyi +165 -0
- mypy/typeshed/stdlib/heapq.pyi +17 -0
- mypy/typeshed/stdlib/hmac.pyi +38 -0
- mypy/typeshed/stdlib/html/__init__.pyi +6 -0
- mypy/typeshed/stdlib/html/entities.pyi +6 -0
- mypy/typeshed/stdlib/html/parser.pyi +34 -0
- mypy/typeshed/stdlib/http/__init__.pyi +105 -0
- mypy/typeshed/stdlib/http/client.pyi +259 -0
- mypy/typeshed/stdlib/http/cookiejar.pyi +159 -0
- mypy/typeshed/stdlib/http/cookies.pyi +60 -0
- mypy/typeshed/stdlib/http/server.pyi +83 -0
- mypy/typeshed/stdlib/imaplib.pyi +168 -0
- mypy/typeshed/stdlib/imghdr.pyi +17 -0
- mypy/typeshed/stdlib/imp.pyi +62 -0
- mypy/typeshed/stdlib/importlib/__init__.pyi +24 -0
- mypy/typeshed/stdlib/importlib/_abc.pyi +15 -0
- mypy/typeshed/stdlib/importlib/abc.pyi +172 -0
- mypy/typeshed/stdlib/importlib/machinery.pyi +179 -0
- mypy/typeshed/stdlib/importlib/metadata/__init__.pyi +276 -0
- mypy/typeshed/stdlib/importlib/metadata/_meta.pyi +40 -0
- mypy/typeshed/stdlib/importlib/readers.pyi +68 -0
- mypy/typeshed/stdlib/importlib/resources/__init__.pyi +46 -0
- mypy/typeshed/stdlib/importlib/resources/abc.pyi +12 -0
- mypy/typeshed/stdlib/importlib/resources/readers.pyi +14 -0
- mypy/typeshed/stdlib/importlib/resources/simple.pyi +49 -0
- mypy/typeshed/stdlib/importlib/simple.pyi +11 -0
- mypy/typeshed/stdlib/importlib/util.pyi +43 -0
- mypy/typeshed/stdlib/inspect.pyi +631 -0
- mypy/typeshed/stdlib/io.pyi +204 -0
- mypy/typeshed/stdlib/ipaddress.pyi +208 -0
- mypy/typeshed/stdlib/itertools.pyi +293 -0
- mypy/typeshed/stdlib/json/__init__.pyi +61 -0
- mypy/typeshed/stdlib/json/decoder.pyi +32 -0
- mypy/typeshed/stdlib/json/encoder.pyi +38 -0
- mypy/typeshed/stdlib/json/tool.pyi +1 -0
- mypy/typeshed/stdlib/keyword.pyi +21 -0
- mypy/typeshed/stdlib/lib2to3/__init__.pyi +0 -0
- mypy/typeshed/stdlib/lib2to3/btm_matcher.pyi +28 -0
- mypy/typeshed/stdlib/lib2to3/fixer_base.pyi +42 -0
- mypy/typeshed/stdlib/lib2to3/fixes/__init__.pyi +0 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_apply.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_asserts.pyi +10 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_basestring.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_buffer.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_dict.pyi +16 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_except.pyi +14 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_exec.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_execfile.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_exitfunc.pyi +13 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_filter.pyi +9 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_funcattrs.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_future.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_getcwdu.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_has_key.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_idioms.pyi +15 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_import.pyi +16 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_imports.pyi +21 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_imports2.pyi +6 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_input.pyi +11 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_intern.pyi +9 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_isinstance.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_itertools.pyi +9 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_itertools_imports.pyi +7 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_long.pyi +7 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_map.pyi +9 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_metaclass.pyi +17 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_methodattrs.pyi +10 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_ne.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_next.pyi +19 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_nonzero.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_numliterals.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_operator.pyi +12 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_paren.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_print.pyi +12 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_raise.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_raw_input.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_reduce.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_reload.pyi +9 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_renames.pyi +17 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_repr.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_set_literal.pyi +7 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_standarderror.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_sys_exc.pyi +9 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_throw.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_tuple_params.pyi +17 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_types.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_unicode.pyi +12 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_urllib.pyi +15 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_ws_comma.pyi +12 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_xrange.pyi +20 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_xreadlines.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_zip.pyi +9 -0
- mypy/typeshed/stdlib/lib2to3/main.pyi +42 -0
- mypy/typeshed/stdlib/lib2to3/pgen2/__init__.pyi +9 -0
- mypy/typeshed/stdlib/lib2to3/pgen2/driver.pyi +27 -0
- mypy/typeshed/stdlib/lib2to3/pgen2/grammar.pyi +24 -0
- mypy/typeshed/stdlib/lib2to3/pgen2/literals.pyi +7 -0
- mypy/typeshed/stdlib/lib2to3/pgen2/parse.pyi +30 -0
- mypy/typeshed/stdlib/lib2to3/pgen2/pgen.pyi +50 -0
- mypy/typeshed/stdlib/lib2to3/pgen2/token.pyi +67 -0
- mypy/typeshed/stdlib/lib2to3/pgen2/tokenize.pyi +96 -0
- mypy/typeshed/stdlib/lib2to3/pygram.pyi +114 -0
- mypy/typeshed/stdlib/lib2to3/pytree.pyi +117 -0
- mypy/typeshed/stdlib/lib2to3/refactor.pyi +82 -0
- mypy/typeshed/stdlib/linecache.pyi +23 -0
- mypy/typeshed/stdlib/locale.pyi +152 -0
- mypy/typeshed/stdlib/logging/__init__.pyi +655 -0
- mypy/typeshed/stdlib/logging/config.pyi +134 -0
- mypy/typeshed/stdlib/logging/handlers.pyi +275 -0
- mypy/typeshed/stdlib/lzma.pyi +197 -0
- mypy/typeshed/stdlib/mailbox.pyi +256 -0
- mypy/typeshed/stdlib/mailcap.pyi +11 -0
- mypy/typeshed/stdlib/marshal.pyi +33 -0
- mypy/typeshed/stdlib/math.pyi +125 -0
- mypy/typeshed/stdlib/mimetypes.pyi +46 -0
- mypy/typeshed/stdlib/mmap.pyi +113 -0
- mypy/typeshed/stdlib/modulefinder.pyi +66 -0
- mypy/typeshed/stdlib/msilib/__init__.pyi +176 -0
- mypy/typeshed/stdlib/msilib/schema.pyi +94 -0
- mypy/typeshed/stdlib/msilib/sequence.pyi +13 -0
- mypy/typeshed/stdlib/msilib/text.pyi +7 -0
- mypy/typeshed/stdlib/msvcrt.pyi +32 -0
- mypy/typeshed/stdlib/multiprocessing/__init__.pyi +90 -0
- mypy/typeshed/stdlib/multiprocessing/connection.pyi +75 -0
- mypy/typeshed/stdlib/multiprocessing/context.pyi +187 -0
- mypy/typeshed/stdlib/multiprocessing/dummy/__init__.pyi +77 -0
- mypy/typeshed/stdlib/multiprocessing/dummy/connection.pyi +39 -0
- mypy/typeshed/stdlib/multiprocessing/forkserver.pyi +31 -0
- mypy/typeshed/stdlib/multiprocessing/heap.pyi +36 -0
- mypy/typeshed/stdlib/multiprocessing/managers.pyi +212 -0
- mypy/typeshed/stdlib/multiprocessing/pool.pyi +103 -0
- mypy/typeshed/stdlib/multiprocessing/popen_fork.pyi +23 -0
- mypy/typeshed/stdlib/multiprocessing/popen_forkserver.pyi +16 -0
- mypy/typeshed/stdlib/multiprocessing/popen_spawn_posix.pyi +20 -0
- mypy/typeshed/stdlib/multiprocessing/popen_spawn_win32.pyi +30 -0
- mypy/typeshed/stdlib/multiprocessing/process.pyi +39 -0
- mypy/typeshed/stdlib/multiprocessing/queues.pyi +41 -0
- mypy/typeshed/stdlib/multiprocessing/reduction.pyi +89 -0
- mypy/typeshed/stdlib/multiprocessing/resource_sharer.pyi +20 -0
- mypy/typeshed/stdlib/multiprocessing/resource_tracker.pyi +18 -0
- mypy/typeshed/stdlib/multiprocessing/shared_memory.pyi +40 -0
- mypy/typeshed/stdlib/multiprocessing/sharedctypes.pyi +101 -0
- mypy/typeshed/stdlib/multiprocessing/spawn.pyi +32 -0
- mypy/typeshed/stdlib/multiprocessing/synchronize.pyi +54 -0
- mypy/typeshed/stdlib/multiprocessing/util.pyi +79 -0
- mypy/typeshed/stdlib/netrc.pyi +23 -0
- mypy/typeshed/stdlib/nis.pyi +9 -0
- mypy/typeshed/stdlib/nntplib.pyi +125 -0
- mypy/typeshed/stdlib/nt.pyi +111 -0
- mypy/typeshed/stdlib/ntpath.pyi +119 -0
- mypy/typeshed/stdlib/nturl2path.pyi +2 -0
- mypy/typeshed/stdlib/numbers.pyi +154 -0
- mypy/typeshed/stdlib/opcode.pyi +59 -0
- mypy/typeshed/stdlib/operator.pyi +110 -0
- mypy/typeshed/stdlib/optparse.pyi +252 -0
- mypy/typeshed/stdlib/os/__init__.pyi +1139 -0
- mypy/typeshed/stdlib/os/path.pyi +8 -0
- mypy/typeshed/stdlib/ossaudiodev.pyi +131 -0
- mypy/typeshed/stdlib/parser.pyi +24 -0
- mypy/typeshed/stdlib/pathlib.pyi +232 -0
- mypy/typeshed/stdlib/pdb.pyi +181 -0
- mypy/typeshed/stdlib/pickle.pyi +270 -0
- mypy/typeshed/stdlib/pickletools.pyi +167 -0
- mypy/typeshed/stdlib/pipes.pyi +16 -0
- mypy/typeshed/stdlib/pkgutil.pyi +53 -0
- mypy/typeshed/stdlib/platform.pyi +42 -0
- mypy/typeshed/stdlib/plistlib.pyi +113 -0
- mypy/typeshed/stdlib/poplib.pyi +71 -0
- mypy/typeshed/stdlib/posix.pyi +359 -0
- mypy/typeshed/stdlib/posixpath.pyi +161 -0
- mypy/typeshed/stdlib/pprint.pyi +112 -0
- mypy/typeshed/stdlib/profile.pyi +31 -0
- mypy/typeshed/stdlib/pstats.pyi +78 -0
- mypy/typeshed/stdlib/pty.pyi +19 -0
- mypy/typeshed/stdlib/pwd.pyi +27 -0
- mypy/typeshed/stdlib/py_compile.pyi +34 -0
- mypy/typeshed/stdlib/pyclbr.pyi +74 -0
- mypy/typeshed/stdlib/pydoc.pyi +261 -0
- mypy/typeshed/stdlib/pydoc_data/__init__.pyi +0 -0
- mypy/typeshed/stdlib/pydoc_data/topics.pyi +1 -0
- mypy/typeshed/stdlib/pyexpat/__init__.pyi +80 -0
- mypy/typeshed/stdlib/pyexpat/errors.pyi +49 -0
- mypy/typeshed/stdlib/pyexpat/model.pyi +11 -0
- mypy/typeshed/stdlib/queue.pyi +58 -0
- mypy/typeshed/stdlib/quopri.pyi +11 -0
- mypy/typeshed/stdlib/random.pyi +138 -0
- mypy/typeshed/stdlib/re.pyi +290 -0
- mypy/typeshed/stdlib/readline.pyi +36 -0
- mypy/typeshed/stdlib/reprlib.pyi +65 -0
- mypy/typeshed/stdlib/resource.pyi +92 -0
- mypy/typeshed/stdlib/rlcompleter.pyi +9 -0
- mypy/typeshed/stdlib/runpy.pyi +24 -0
- mypy/typeshed/stdlib/sched.pyi +42 -0
- mypy/typeshed/stdlib/secrets.pyi +15 -0
- mypy/typeshed/stdlib/select.pyi +151 -0
- mypy/typeshed/stdlib/selectors.pyi +67 -0
- mypy/typeshed/stdlib/shelve.pyi +46 -0
- mypy/typeshed/stdlib/shlex.pyi +43 -0
- mypy/typeshed/stdlib/shutil.pyi +189 -0
- mypy/typeshed/stdlib/signal.pyi +189 -0
- mypy/typeshed/stdlib/site.pyi +27 -0
- mypy/typeshed/stdlib/smtpd.pyi +91 -0
- mypy/typeshed/stdlib/smtplib.pyi +204 -0
- mypy/typeshed/stdlib/sndhdr.pyi +14 -0
- mypy/typeshed/stdlib/socket.pyi +825 -0
- mypy/typeshed/stdlib/socketserver.pyi +168 -0
- mypy/typeshed/stdlib/spwd.pyi +40 -0
- mypy/typeshed/stdlib/sqlite3/__init__.pyi +1 -0
- mypy/typeshed/stdlib/sqlite3/dbapi2.pyi +469 -0
- mypy/typeshed/stdlib/sre_compile.pyi +11 -0
- mypy/typeshed/stdlib/sre_constants.pyi +130 -0
- mypy/typeshed/stdlib/sre_parse.pyi +104 -0
- mypy/typeshed/stdlib/ssl.pyi +529 -0
- mypy/typeshed/stdlib/stat.pyi +1 -0
- mypy/typeshed/stdlib/statistics.pyi +132 -0
- mypy/typeshed/stdlib/string.pyi +83 -0
- mypy/typeshed/stdlib/stringprep.pyi +27 -0
- mypy/typeshed/stdlib/struct.pyi +26 -0
- mypy/typeshed/stdlib/subprocess.pyi +2614 -0
- mypy/typeshed/stdlib/sunau.pyi +86 -0
- mypy/typeshed/stdlib/symbol.pyi +93 -0
- mypy/typeshed/stdlib/symtable.pyi +58 -0
- mypy/typeshed/stdlib/sys/__init__.pyi +373 -0
- mypy/typeshed/stdlib/sys/_monitoring.pyi +52 -0
- mypy/typeshed/stdlib/sysconfig.pyi +43 -0
- mypy/typeshed/stdlib/syslog.pyi +46 -0
- mypy/typeshed/stdlib/tabnanny.pyi +16 -0
- mypy/typeshed/stdlib/tarfile.pyi +438 -0
- mypy/typeshed/stdlib/telnetlib.pyi +122 -0
- mypy/typeshed/stdlib/tempfile.pyi +477 -0
- mypy/typeshed/stdlib/termios.pyi +267 -0
- mypy/typeshed/stdlib/textwrap.pyi +103 -0
- mypy/typeshed/stdlib/this.pyi +2 -0
- mypy/typeshed/stdlib/threading.pyi +187 -0
- mypy/typeshed/stdlib/time.pyi +107 -0
- mypy/typeshed/stdlib/timeit.pyi +32 -0
- mypy/typeshed/stdlib/tkinter/__init__.pyi +3641 -0
- mypy/typeshed/stdlib/tkinter/colorchooser.pyi +20 -0
- mypy/typeshed/stdlib/tkinter/commondialog.pyi +14 -0
- mypy/typeshed/stdlib/tkinter/constants.pyi +80 -0
- mypy/typeshed/stdlib/tkinter/dialog.pyi +16 -0
- mypy/typeshed/stdlib/tkinter/dnd.pyi +20 -0
- mypy/typeshed/stdlib/tkinter/filedialog.pyi +151 -0
- mypy/typeshed/stdlib/tkinter/font.pyi +116 -0
- mypy/typeshed/stdlib/tkinter/messagebox.pyi +44 -0
- mypy/typeshed/stdlib/tkinter/scrolledtext.pyi +10 -0
- mypy/typeshed/stdlib/tkinter/simpledialog.pyi +54 -0
- mypy/typeshed/stdlib/tkinter/tix.pyi +299 -0
- mypy/typeshed/stdlib/tkinter/ttk.pyi +1191 -0
- mypy/typeshed/stdlib/token.pyi +159 -0
- mypy/typeshed/stdlib/tokenize.pyi +177 -0
- mypy/typeshed/stdlib/tomllib.pyi +10 -0
- mypy/typeshed/stdlib/trace.pyi +79 -0
- mypy/typeshed/stdlib/traceback.pyi +260 -0
- mypy/typeshed/stdlib/tracemalloc.pyi +124 -0
- mypy/typeshed/stdlib/tty.pyi +30 -0
- mypy/typeshed/stdlib/turtle.pyi +713 -0
- mypy/typeshed/stdlib/types.pyi +605 -0
- mypy/typeshed/stdlib/typing.pyi +968 -0
- mypy/typeshed/stdlib/typing_extensions.pyi +503 -0
- mypy/typeshed/stdlib/unicodedata.pyi +71 -0
- mypy/typeshed/stdlib/unittest/__init__.pyi +67 -0
- mypy/typeshed/stdlib/unittest/_log.pyi +27 -0
- mypy/typeshed/stdlib/unittest/async_case.pyi +21 -0
- mypy/typeshed/stdlib/unittest/case.pyi +342 -0
- mypy/typeshed/stdlib/unittest/loader.pyi +51 -0
- mypy/typeshed/stdlib/unittest/main.pyi +69 -0
- mypy/typeshed/stdlib/unittest/mock.pyi +430 -0
- mypy/typeshed/stdlib/unittest/result.pyi +46 -0
- mypy/typeshed/stdlib/unittest/runner.pyi +72 -0
- mypy/typeshed/stdlib/unittest/signals.pyi +15 -0
- mypy/typeshed/stdlib/unittest/suite.pyi +22 -0
- mypy/typeshed/stdlib/unittest/util.pyi +23 -0
- mypy/typeshed/stdlib/urllib/__init__.pyi +0 -0
- mypy/typeshed/stdlib/urllib/error.pyi +23 -0
- mypy/typeshed/stdlib/urllib/parse.pyi +210 -0
- mypy/typeshed/stdlib/urllib/request.pyi +399 -0
- mypy/typeshed/stdlib/urllib/response.pyi +43 -0
- mypy/typeshed/stdlib/urllib/robotparser.pyi +20 -0
- mypy/typeshed/stdlib/uu.pyi +13 -0
- mypy/typeshed/stdlib/uuid.pyi +100 -0
- mypy/typeshed/stdlib/venv/__init__.pyi +79 -0
- mypy/typeshed/stdlib/warnings.pyi +112 -0
- mypy/typeshed/stdlib/wave.pyi +85 -0
- mypy/typeshed/stdlib/weakref.pyi +150 -0
- mypy/typeshed/stdlib/webbrowser.pyi +74 -0
- mypy/typeshed/stdlib/winreg.pyi +103 -0
- mypy/typeshed/stdlib/winsound.pyi +28 -0
- mypy/typeshed/stdlib/wsgiref/__init__.pyi +0 -0
- mypy/typeshed/stdlib/wsgiref/handlers.pyi +91 -0
- mypy/typeshed/stdlib/wsgiref/headers.pyi +26 -0
- mypy/typeshed/stdlib/wsgiref/simple_server.pyi +37 -0
- mypy/typeshed/stdlib/wsgiref/types.pyi +32 -0
- mypy/typeshed/stdlib/wsgiref/util.pyi +24 -0
- mypy/typeshed/stdlib/wsgiref/validate.pyi +50 -0
- mypy/typeshed/stdlib/xdrlib.pyi +57 -0
- mypy/typeshed/stdlib/xml/__init__.pyi +1 -0
- mypy/typeshed/stdlib/xml/dom/NodeFilter.pyi +19 -0
- mypy/typeshed/stdlib/xml/dom/__init__.pyi +69 -0
- mypy/typeshed/stdlib/xml/dom/domreg.pyi +8 -0
- mypy/typeshed/stdlib/xml/dom/expatbuilder.pyi +100 -0
- mypy/typeshed/stdlib/xml/dom/minicompat.pyi +22 -0
- mypy/typeshed/stdlib/xml/dom/minidom.pyi +404 -0
- mypy/typeshed/stdlib/xml/dom/pulldom.pyi +94 -0
- mypy/typeshed/stdlib/xml/dom/xmlbuilder.pyi +108 -0
- mypy/typeshed/stdlib/xml/etree/ElementInclude.pyi +28 -0
- mypy/typeshed/stdlib/xml/etree/ElementPath.pyi +34 -0
- mypy/typeshed/stdlib/xml/etree/ElementTree.pyi +321 -0
- mypy/typeshed/stdlib/xml/etree/__init__.pyi +0 -0
- mypy/typeshed/stdlib/xml/etree/cElementTree.pyi +1 -0
- mypy/typeshed/stdlib/xml/parsers/__init__.pyi +1 -0
- mypy/typeshed/stdlib/xml/parsers/expat/__init__.pyi +1 -0
- mypy/typeshed/stdlib/xml/parsers/expat/errors.pyi +1 -0
- mypy/typeshed/stdlib/xml/parsers/expat/model.pyi +1 -0
- mypy/typeshed/stdlib/xml/sax/__init__.pyi +25 -0
- mypy/typeshed/stdlib/xml/sax/_exceptions.pyi +19 -0
- mypy/typeshed/stdlib/xml/sax/handler.pyi +55 -0
- mypy/typeshed/stdlib/xml/sax/saxutils.pyi +60 -0
- mypy/typeshed/stdlib/xml/sax/xmlreader.pyi +87 -0
- mypy/typeshed/stdlib/xmlrpc/__init__.pyi +0 -0
- mypy/typeshed/stdlib/xmlrpc/client.pyi +296 -0
- mypy/typeshed/stdlib/xmlrpc/server.pyi +143 -0
- mypy/typeshed/stdlib/xxlimited.pyi +22 -0
- mypy/typeshed/stdlib/zipapp.pyi +20 -0
- mypy/typeshed/stdlib/zipfile/__init__.pyi +306 -0
- mypy/typeshed/stdlib/zipfile/_path.pyi +95 -0
- mypy/typeshed/stdlib/zipimport.pyi +32 -0
- mypy/typeshed/stdlib/zlib.pyi +56 -0
- mypy/typeshed/stdlib/zoneinfo/__init__.pyi +38 -0
- mypy/typeshed/stubs/mypy-extensions/mypy_extensions.pyi +218 -0
- mypy/typestate.py +323 -0
- mypy/typetraverser.py +142 -0
- mypy/typevars.py +93 -0
- mypy/typevartuples.py +32 -0
- mypy/util.py +869 -0
- mypy/version.py +1 -0
- mypy/visitor.py +621 -0
- mypy/xml/mypy-html.css +104 -0
- mypy/xml/mypy-html.xslt +81 -0
- mypy/xml/mypy-txt.xslt +100 -0
- mypy/xml/mypy.xsd +50 -0
- mypy_dev-1.9.0.dev0.dist-info/LICENSE +229 -0
- mypy_dev-1.9.0.dev0.dist-info/METADATA +39 -0
- mypy_dev-1.9.0.dev0.dist-info/RECORD +1018 -0
- mypy_dev-1.9.0.dev0.dist-info/WHEEL +5 -0
- mypy_dev-1.9.0.dev0.dist-info/entry_points.txt +6 -0
- mypy_dev-1.9.0.dev0.dist-info/top_level.txt +2 -0
- mypyc/README.md +133 -0
- mypyc/__init__.py +0 -0
- mypyc/__main__.py +57 -0
- mypyc/analysis/__init__.py +0 -0
- mypyc/analysis/attrdefined.py +436 -0
- mypyc/analysis/blockfreq.py +32 -0
- mypyc/analysis/dataflow.py +624 -0
- mypyc/analysis/ircheck.py +429 -0
- mypyc/analysis/selfleaks.py +207 -0
- mypyc/build.py +616 -0
- mypyc/codegen/__init__.py +0 -0
- mypyc/codegen/cstring.py +54 -0
- mypyc/codegen/emit.py +1193 -0
- mypyc/codegen/emitclass.py +1060 -0
- mypyc/codegen/emitfunc.py +846 -0
- mypyc/codegen/emitmodule.py +1131 -0
- mypyc/codegen/emitwrapper.py +979 -0
- mypyc/codegen/literals.py +302 -0
- mypyc/common.py +136 -0
- mypyc/crash.py +31 -0
- mypyc/doc/Makefile +20 -0
- mypyc/doc/bool_operations.rst +27 -0
- mypyc/doc/compilation_units.rst +20 -0
- mypyc/doc/conf.py +59 -0
- mypyc/doc/cpython-timings.md +25 -0
- mypyc/doc/dev-intro.md +548 -0
- mypyc/doc/dict_operations.rst +59 -0
- mypyc/doc/differences_from_python.rst +332 -0
- mypyc/doc/float_operations.rst +50 -0
- mypyc/doc/future.md +42 -0
- mypyc/doc/getting_started.rst +240 -0
- mypyc/doc/index.rst +61 -0
- mypyc/doc/int_operations.rst +162 -0
- mypyc/doc/introduction.rst +150 -0
- mypyc/doc/list_operations.rst +65 -0
- mypyc/doc/make.bat +35 -0
- mypyc/doc/native_classes.rst +206 -0
- mypyc/doc/native_operations.rst +55 -0
- mypyc/doc/performance_tips_and_tricks.rst +244 -0
- mypyc/doc/set_operations.rst +47 -0
- mypyc/doc/str_operations.rst +35 -0
- mypyc/doc/tuple_operations.rst +33 -0
- mypyc/doc/using_type_annotations.rst +398 -0
- mypyc/errors.py +29 -0
- mypyc/external/googletest/LICENSE +28 -0
- mypyc/external/googletest/README.md +280 -0
- mypyc/external/googletest/include/gtest/gtest-death-test.h +294 -0
- mypyc/external/googletest/include/gtest/gtest-message.h +250 -0
- mypyc/external/googletest/include/gtest/gtest-param-test.h +1444 -0
- mypyc/external/googletest/include/gtest/gtest-param-test.h.pump +510 -0
- mypyc/external/googletest/include/gtest/gtest-printers.h +993 -0
- mypyc/external/googletest/include/gtest/gtest-spi.h +232 -0
- mypyc/external/googletest/include/gtest/gtest-test-part.h +179 -0
- mypyc/external/googletest/include/gtest/gtest-typed-test.h +263 -0
- mypyc/external/googletest/include/gtest/gtest.h +2236 -0
- mypyc/external/googletest/include/gtest/gtest_pred_impl.h +358 -0
- mypyc/external/googletest/include/gtest/gtest_prod.h +58 -0
- mypyc/external/googletest/include/gtest/internal/custom/gtest-port.h +69 -0
- mypyc/external/googletest/include/gtest/internal/custom/gtest-printers.h +42 -0
- mypyc/external/googletest/include/gtest/internal/custom/gtest.h +41 -0
- mypyc/external/googletest/include/gtest/internal/gtest-death-test-internal.h +319 -0
- mypyc/external/googletest/include/gtest/internal/gtest-filepath.h +206 -0
- mypyc/external/googletest/include/gtest/internal/gtest-internal.h +1238 -0
- mypyc/external/googletest/include/gtest/internal/gtest-linked_ptr.h +243 -0
- mypyc/external/googletest/include/gtest/internal/gtest-param-util-generated.h +5146 -0
- mypyc/external/googletest/include/gtest/internal/gtest-param-util-generated.h.pump +286 -0
- mypyc/external/googletest/include/gtest/internal/gtest-param-util.h +731 -0
- mypyc/external/googletest/include/gtest/internal/gtest-port-arch.h +93 -0
- mypyc/external/googletest/include/gtest/internal/gtest-port.h +2560 -0
- mypyc/external/googletest/include/gtest/internal/gtest-string.h +167 -0
- mypyc/external/googletest/include/gtest/internal/gtest-tuple.h +1020 -0
- mypyc/external/googletest/include/gtest/internal/gtest-tuple.h.pump +347 -0
- mypyc/external/googletest/include/gtest/internal/gtest-type-util.h +3331 -0
- mypyc/external/googletest/include/gtest/internal/gtest-type-util.h.pump +297 -0
- mypyc/external/googletest/make/Makefile +61 -0
- mypyc/external/googletest/src/gtest-all.cc +48 -0
- mypyc/external/googletest/src/gtest-death-test.cc +1342 -0
- mypyc/external/googletest/src/gtest-filepath.cc +387 -0
- mypyc/external/googletest/src/gtest-internal-inl.h +1183 -0
- mypyc/external/googletest/src/gtest-port.cc +1259 -0
- mypyc/external/googletest/src/gtest-printers.cc +373 -0
- mypyc/external/googletest/src/gtest-test-part.cc +110 -0
- mypyc/external/googletest/src/gtest-typed-test.cc +118 -0
- mypyc/external/googletest/src/gtest.cc +5388 -0
- mypyc/external/googletest/src/gtest_main.cc +38 -0
- mypyc/ir/__init__.py +0 -0
- mypyc/ir/class_ir.py +499 -0
- mypyc/ir/func_ir.py +370 -0
- mypyc/ir/module_ir.py +88 -0
- mypyc/ir/ops.py +1642 -0
- mypyc/ir/pprint.py +496 -0
- mypyc/ir/rtypes.py +1038 -0
- mypyc/irbuild/__init__.py +0 -0
- mypyc/irbuild/ast_helpers.py +120 -0
- mypyc/irbuild/builder.py +1398 -0
- mypyc/irbuild/callable_class.py +173 -0
- mypyc/irbuild/classdef.py +850 -0
- mypyc/irbuild/constant_fold.py +95 -0
- mypyc/irbuild/context.py +186 -0
- mypyc/irbuild/env_class.py +223 -0
- mypyc/irbuild/expression.py +1067 -0
- mypyc/irbuild/for_helpers.py +1046 -0
- mypyc/irbuild/format_str_tokenizer.py +250 -0
- mypyc/irbuild/function.py +1089 -0
- mypyc/irbuild/generator.py +346 -0
- mypyc/irbuild/ll_builder.py +2407 -0
- mypyc/irbuild/main.py +153 -0
- mypyc/irbuild/mapper.py +221 -0
- mypyc/irbuild/match.py +355 -0
- mypyc/irbuild/nonlocalcontrol.py +197 -0
- mypyc/irbuild/prebuildvisitor.py +203 -0
- mypyc/irbuild/prepare.py +609 -0
- mypyc/irbuild/specialize.py +822 -0
- mypyc/irbuild/statement.py +1017 -0
- mypyc/irbuild/targets.py +57 -0
- mypyc/irbuild/util.py +189 -0
- mypyc/irbuild/visitor.py +401 -0
- mypyc/irbuild/vtable.py +82 -0
- mypyc/lib-rt/CPy.h +643 -0
- mypyc/lib-rt/bytes_ops.c +143 -0
- mypyc/lib-rt/dict_ops.c +446 -0
- mypyc/lib-rt/exc_ops.c +259 -0
- mypyc/lib-rt/float_ops.c +192 -0
- mypyc/lib-rt/generic_ops.c +64 -0
- mypyc/lib-rt/getargs.c +450 -0
- mypyc/lib-rt/getargsfast.c +569 -0
- mypyc/lib-rt/init.c +13 -0
- mypyc/lib-rt/int_ops.c +803 -0
- mypyc/lib-rt/list_ops.c +335 -0
- mypyc/lib-rt/misc_ops.c +942 -0
- mypyc/lib-rt/module_shim.tmpl +18 -0
- mypyc/lib-rt/mypyc_util.h +118 -0
- mypyc/lib-rt/pythoncapi_compat.h +497 -0
- mypyc/lib-rt/pythonsupport.h +548 -0
- mypyc/lib-rt/set_ops.c +17 -0
- mypyc/lib-rt/setup.py +70 -0
- mypyc/lib-rt/str_ops.c +241 -0
- mypyc/lib-rt/test_capi.cc +585 -0
- mypyc/lib-rt/tuple_ops.c +61 -0
- mypyc/namegen.py +115 -0
- mypyc/options.py +32 -0
- mypyc/primitives/__init__.py +0 -0
- mypyc/primitives/bytes_ops.py +101 -0
- mypyc/primitives/dict_ops.py +325 -0
- mypyc/primitives/exc_ops.py +101 -0
- mypyc/primitives/float_ops.py +168 -0
- mypyc/primitives/generic_ops.py +384 -0
- mypyc/primitives/int_ops.py +304 -0
- mypyc/primitives/list_ops.py +300 -0
- mypyc/primitives/misc_ops.py +241 -0
- mypyc/primitives/registry.py +323 -0
- mypyc/primitives/set_ops.py +121 -0
- mypyc/primitives/str_ops.py +229 -0
- mypyc/primitives/tuple_ops.py +83 -0
- mypyc/rt_subtype.py +77 -0
- mypyc/sametype.py +83 -0
- mypyc/subtype.py +88 -0
- mypyc/test/__init__.py +0 -0
- mypyc/test/config.py +13 -0
- mypyc/test/test_alwaysdefined.py +46 -0
- mypyc/test/test_analysis.py +77 -0
- mypyc/test/test_cheader.py +45 -0
- mypyc/test/test_commandline.py +82 -0
- mypyc/test/test_emit.py +69 -0
- mypyc/test/test_emitclass.py +35 -0
- mypyc/test/test_emitfunc.py +926 -0
- mypyc/test/test_emitwrapper.py +60 -0
- mypyc/test/test_exceptions.py +56 -0
- mypyc/test/test_external.py +49 -0
- mypyc/test/test_irbuild.py +87 -0
- mypyc/test/test_ircheck.py +199 -0
- mypyc/test/test_literals.py +90 -0
- mypyc/test/test_namegen.py +48 -0
- mypyc/test/test_pprint.py +42 -0
- mypyc/test/test_rarray.py +48 -0
- mypyc/test/test_refcount.py +59 -0
- mypyc/test/test_run.py +426 -0
- mypyc/test/test_serialization.py +108 -0
- mypyc/test/test_struct.py +112 -0
- mypyc/test/test_tuplename.py +33 -0
- mypyc/test/test_typeops.py +97 -0
- mypyc/test/testutil.py +283 -0
- mypyc/test-data/alwaysdefined.test +732 -0
- mypyc/test-data/analysis.test +603 -0
- mypyc/test-data/commandline.test +245 -0
- mypyc/test-data/driver/driver.py +48 -0
- mypyc/test-data/exceptions-freq.test +125 -0
- mypyc/test-data/exceptions.test +713 -0
- mypyc/test-data/fixtures/ir.py +373 -0
- mypyc/test-data/fixtures/testutil.py +103 -0
- mypyc/test-data/fixtures/typing-full.pyi +169 -0
- mypyc/test-data/irbuild-any.test +238 -0
- mypyc/test-data/irbuild-basic.test +3690 -0
- mypyc/test-data/irbuild-bool.test +463 -0
- mypyc/test-data/irbuild-bytes.test +184 -0
- mypyc/test-data/irbuild-classes.test +1303 -0
- mypyc/test-data/irbuild-constant-fold.test +480 -0
- mypyc/test-data/irbuild-dict.test +585 -0
- mypyc/test-data/irbuild-dunders.test +223 -0
- mypyc/test-data/irbuild-float.test +497 -0
- mypyc/test-data/irbuild-generics.test +151 -0
- mypyc/test-data/irbuild-glue-methods.test +437 -0
- mypyc/test-data/irbuild-i16.test +526 -0
- mypyc/test-data/irbuild-i32.test +598 -0
- mypyc/test-data/irbuild-i64.test +2164 -0
- mypyc/test-data/irbuild-int.test +235 -0
- mypyc/test-data/irbuild-isinstance.test +109 -0
- mypyc/test-data/irbuild-lists.test +547 -0
- mypyc/test-data/irbuild-match.test +1708 -0
- mypyc/test-data/irbuild-math.test +64 -0
- mypyc/test-data/irbuild-nested.test +807 -0
- mypyc/test-data/irbuild-optional.test +536 -0
- mypyc/test-data/irbuild-set.test +838 -0
- mypyc/test-data/irbuild-singledispatch.test +257 -0
- mypyc/test-data/irbuild-statements.test +1149 -0
- mypyc/test-data/irbuild-str.test +314 -0
- mypyc/test-data/irbuild-strip-asserts.test +12 -0
- mypyc/test-data/irbuild-try.test +523 -0
- mypyc/test-data/irbuild-tuple.test +462 -0
- mypyc/test-data/irbuild-u8.test +543 -0
- mypyc/test-data/irbuild-unreachable.test +241 -0
- mypyc/test-data/irbuild-vectorcall.test +153 -0
- mypyc/test-data/refcount.test +1588 -0
- mypyc/test-data/run-async.test +145 -0
- mypyc/test-data/run-attrs.test +318 -0
- mypyc/test-data/run-bench.test +196 -0
- mypyc/test-data/run-bools.test +229 -0
- mypyc/test-data/run-bytes.test +302 -0
- mypyc/test-data/run-classes.test +2505 -0
- mypyc/test-data/run-dicts.test +334 -0
- mypyc/test-data/run-dunders.test +945 -0
- mypyc/test-data/run-exceptions.test +448 -0
- mypyc/test-data/run-floats.test +516 -0
- mypyc/test-data/run-functions.test +1310 -0
- mypyc/test-data/run-generators.test +681 -0
- mypyc/test-data/run-i16.test +338 -0
- mypyc/test-data/run-i32.test +336 -0
- mypyc/test-data/run-i64.test +1519 -0
- mypyc/test-data/run-imports.test +265 -0
- mypyc/test-data/run-integers.test +540 -0
- mypyc/test-data/run-lists.test +411 -0
- mypyc/test-data/run-loops.test +485 -0
- mypyc/test-data/run-match.test +283 -0
- mypyc/test-data/run-math.test +106 -0
- mypyc/test-data/run-misc.test +1168 -0
- mypyc/test-data/run-multimodule.test +887 -0
- mypyc/test-data/run-mypy-sim.test +138 -0
- mypyc/test-data/run-primitives.test +375 -0
- mypyc/test-data/run-python37.test +159 -0
- mypyc/test-data/run-python38.test +88 -0
- mypyc/test-data/run-sets.test +150 -0
- mypyc/test-data/run-singledispatch.test +698 -0
- mypyc/test-data/run-strings.test +641 -0
- mypyc/test-data/run-traits.test +411 -0
- mypyc/test-data/run-tuples.test +258 -0
- mypyc/test-data/run-u8.test +303 -0
- mypyc/transform/__init__.py +0 -0
- mypyc/transform/exceptions.py +182 -0
- mypyc/transform/refcount.py +294 -0
- mypyc/transform/uninit.py +190 -0
mypy/find_sources.py
ADDED
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
"""Routines for finding the sources that mypy will check"""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import functools
|
|
6
|
+
import os
|
|
7
|
+
from typing import Final, Sequence
|
|
8
|
+
|
|
9
|
+
from mypy.fscache import FileSystemCache
|
|
10
|
+
from mypy.modulefinder import PYTHON_EXTENSIONS, BuildSource, matches_exclude, mypy_path
|
|
11
|
+
from mypy.options import Options
|
|
12
|
+
|
|
13
|
+
PY_EXTENSIONS: Final = tuple(PYTHON_EXTENSIONS)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class InvalidSourceList(Exception):
|
|
17
|
+
"""Exception indicating a problem in the list of sources given to mypy."""
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def create_source_list(
|
|
21
|
+
paths: Sequence[str],
|
|
22
|
+
options: Options,
|
|
23
|
+
fscache: FileSystemCache | None = None,
|
|
24
|
+
allow_empty_dir: bool = False,
|
|
25
|
+
) -> list[BuildSource]:
|
|
26
|
+
"""From a list of source files/directories, makes a list of BuildSources.
|
|
27
|
+
|
|
28
|
+
Raises InvalidSourceList on errors.
|
|
29
|
+
"""
|
|
30
|
+
fscache = fscache or FileSystemCache()
|
|
31
|
+
finder = SourceFinder(fscache, options)
|
|
32
|
+
|
|
33
|
+
sources = []
|
|
34
|
+
for path in paths:
|
|
35
|
+
path = os.path.normpath(path)
|
|
36
|
+
if path.endswith(PY_EXTENSIONS):
|
|
37
|
+
# Can raise InvalidSourceList if a directory doesn't have a valid module name.
|
|
38
|
+
name, base_dir = finder.crawl_up(path)
|
|
39
|
+
sources.append(BuildSource(path, name, None, base_dir))
|
|
40
|
+
elif fscache.isdir(path):
|
|
41
|
+
sub_sources = finder.find_sources_in_dir(path)
|
|
42
|
+
if not sub_sources and not allow_empty_dir:
|
|
43
|
+
raise InvalidSourceList(f"There are no .py[i] files in directory '{path}'")
|
|
44
|
+
sources.extend(sub_sources)
|
|
45
|
+
else:
|
|
46
|
+
mod = os.path.basename(path) if options.scripts_are_modules else None
|
|
47
|
+
sources.append(BuildSource(path, mod, None))
|
|
48
|
+
return sources
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def keyfunc(name: str) -> tuple[bool, int, str]:
|
|
52
|
+
"""Determines sort order for directory listing.
|
|
53
|
+
|
|
54
|
+
The desirable properties are:
|
|
55
|
+
1) foo < foo.pyi < foo.py
|
|
56
|
+
2) __init__.py[i] < foo
|
|
57
|
+
"""
|
|
58
|
+
base, suffix = os.path.splitext(name)
|
|
59
|
+
for i, ext in enumerate(PY_EXTENSIONS):
|
|
60
|
+
if suffix == ext:
|
|
61
|
+
return (base != "__init__", i, base)
|
|
62
|
+
return (base != "__init__", -1, name)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def normalise_package_base(root: str) -> str:
|
|
66
|
+
if not root:
|
|
67
|
+
root = os.curdir
|
|
68
|
+
root = os.path.abspath(root)
|
|
69
|
+
if root.endswith(os.sep):
|
|
70
|
+
root = root[:-1]
|
|
71
|
+
return root
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def get_explicit_package_bases(options: Options) -> list[str] | None:
|
|
75
|
+
"""Returns explicit package bases to use if the option is enabled, or None if disabled.
|
|
76
|
+
|
|
77
|
+
We currently use MYPYPATH and the current directory as the package bases. In the future,
|
|
78
|
+
when --namespace-packages is the default could also use the values passed with the
|
|
79
|
+
--package-root flag, see #9632.
|
|
80
|
+
|
|
81
|
+
Values returned are normalised so we can use simple string comparisons in
|
|
82
|
+
SourceFinder.is_explicit_package_base
|
|
83
|
+
"""
|
|
84
|
+
if not options.explicit_package_bases:
|
|
85
|
+
return None
|
|
86
|
+
roots = mypy_path() + options.mypy_path + [os.getcwd()]
|
|
87
|
+
return [normalise_package_base(root) for root in roots]
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
class SourceFinder:
|
|
91
|
+
def __init__(self, fscache: FileSystemCache, options: Options) -> None:
|
|
92
|
+
self.fscache = fscache
|
|
93
|
+
self.explicit_package_bases = get_explicit_package_bases(options)
|
|
94
|
+
self.namespace_packages = options.namespace_packages
|
|
95
|
+
self.exclude = options.exclude
|
|
96
|
+
self.verbosity = options.verbosity
|
|
97
|
+
|
|
98
|
+
def is_explicit_package_base(self, path: str) -> bool:
|
|
99
|
+
assert self.explicit_package_bases
|
|
100
|
+
return normalise_package_base(path) in self.explicit_package_bases
|
|
101
|
+
|
|
102
|
+
def find_sources_in_dir(self, path: str) -> list[BuildSource]:
|
|
103
|
+
sources = []
|
|
104
|
+
|
|
105
|
+
seen: set[str] = set()
|
|
106
|
+
names = sorted(self.fscache.listdir(path), key=keyfunc)
|
|
107
|
+
for name in names:
|
|
108
|
+
# Skip certain names altogether
|
|
109
|
+
if name in ("__pycache__", "site-packages", "node_modules") or name.startswith("."):
|
|
110
|
+
continue
|
|
111
|
+
subpath = os.path.join(path, name)
|
|
112
|
+
|
|
113
|
+
if matches_exclude(subpath, self.exclude, self.fscache, self.verbosity >= 2):
|
|
114
|
+
continue
|
|
115
|
+
|
|
116
|
+
if self.fscache.isdir(subpath):
|
|
117
|
+
sub_sources = self.find_sources_in_dir(subpath)
|
|
118
|
+
if sub_sources:
|
|
119
|
+
seen.add(name)
|
|
120
|
+
sources.extend(sub_sources)
|
|
121
|
+
else:
|
|
122
|
+
stem, suffix = os.path.splitext(name)
|
|
123
|
+
if stem not in seen and suffix in PY_EXTENSIONS:
|
|
124
|
+
seen.add(stem)
|
|
125
|
+
module, base_dir = self.crawl_up(subpath)
|
|
126
|
+
sources.append(BuildSource(subpath, module, None, base_dir))
|
|
127
|
+
|
|
128
|
+
return sources
|
|
129
|
+
|
|
130
|
+
def crawl_up(self, path: str) -> tuple[str, str]:
|
|
131
|
+
"""Given a .py[i] filename, return module and base directory.
|
|
132
|
+
|
|
133
|
+
For example, given "xxx/yyy/foo/bar.py", we might return something like:
|
|
134
|
+
("foo.bar", "xxx/yyy")
|
|
135
|
+
|
|
136
|
+
If namespace packages is off, we crawl upwards until we find a directory without
|
|
137
|
+
an __init__.py
|
|
138
|
+
|
|
139
|
+
If namespace packages is on, we crawl upwards until the nearest explicit base directory.
|
|
140
|
+
Failing that, we return one past the highest directory containing an __init__.py
|
|
141
|
+
|
|
142
|
+
We won't crawl past directories with invalid package names.
|
|
143
|
+
The base directory returned is an absolute path.
|
|
144
|
+
"""
|
|
145
|
+
path = os.path.abspath(path)
|
|
146
|
+
parent, filename = os.path.split(path)
|
|
147
|
+
|
|
148
|
+
module_name = strip_py(filename) or filename
|
|
149
|
+
|
|
150
|
+
parent_module, base_dir = self.crawl_up_dir(parent)
|
|
151
|
+
if module_name == "__init__":
|
|
152
|
+
return parent_module, base_dir
|
|
153
|
+
|
|
154
|
+
# Note that module_name might not actually be a valid identifier, but that's okay
|
|
155
|
+
# Ignoring this possibility sidesteps some search path confusion
|
|
156
|
+
module = module_join(parent_module, module_name)
|
|
157
|
+
return module, base_dir
|
|
158
|
+
|
|
159
|
+
def crawl_up_dir(self, dir: str) -> tuple[str, str]:
|
|
160
|
+
return self._crawl_up_helper(dir) or ("", dir)
|
|
161
|
+
|
|
162
|
+
@functools.lru_cache # noqa: B019
|
|
163
|
+
def _crawl_up_helper(self, dir: str) -> tuple[str, str] | None:
|
|
164
|
+
"""Given a directory, maybe returns module and base directory.
|
|
165
|
+
|
|
166
|
+
We return a non-None value if we were able to find something clearly intended as a base
|
|
167
|
+
directory (as adjudicated by being an explicit base directory or by containing a package
|
|
168
|
+
with __init__.py).
|
|
169
|
+
|
|
170
|
+
This distinction is necessary for namespace packages, so that we know when to treat
|
|
171
|
+
ourselves as a subpackage.
|
|
172
|
+
"""
|
|
173
|
+
# stop crawling if we're an explicit base directory
|
|
174
|
+
if self.explicit_package_bases is not None and self.is_explicit_package_base(dir):
|
|
175
|
+
return "", dir
|
|
176
|
+
|
|
177
|
+
parent, name = os.path.split(dir)
|
|
178
|
+
if name.endswith("-stubs"):
|
|
179
|
+
name = name[:-6] # PEP-561 stub-only directory
|
|
180
|
+
|
|
181
|
+
# recurse if there's an __init__.py
|
|
182
|
+
init_file = self.get_init_file(dir)
|
|
183
|
+
if init_file is not None:
|
|
184
|
+
if not name.isidentifier():
|
|
185
|
+
# in most cases the directory name is invalid, we'll just stop crawling upwards
|
|
186
|
+
# but if there's an __init__.py in the directory, something is messed up
|
|
187
|
+
raise InvalidSourceList(f"{name} is not a valid Python package name")
|
|
188
|
+
# we're definitely a package, so we always return a non-None value
|
|
189
|
+
mod_prefix, base_dir = self.crawl_up_dir(parent)
|
|
190
|
+
return module_join(mod_prefix, name), base_dir
|
|
191
|
+
|
|
192
|
+
# stop crawling if we're out of path components or our name is an invalid identifier
|
|
193
|
+
if not name or not parent or not name.isidentifier():
|
|
194
|
+
return None
|
|
195
|
+
|
|
196
|
+
# stop crawling if namespace packages is off (since we don't have an __init__.py)
|
|
197
|
+
if not self.namespace_packages:
|
|
198
|
+
return None
|
|
199
|
+
|
|
200
|
+
# at this point: namespace packages is on, we don't have an __init__.py and we're not an
|
|
201
|
+
# explicit base directory
|
|
202
|
+
result = self._crawl_up_helper(parent)
|
|
203
|
+
if result is None:
|
|
204
|
+
# we're not an explicit base directory and we don't have an __init__.py
|
|
205
|
+
# and none of our parents are either, so return
|
|
206
|
+
return None
|
|
207
|
+
# one of our parents was an explicit base directory or had an __init__.py, so we're
|
|
208
|
+
# definitely a subpackage! chain our name to the module.
|
|
209
|
+
mod_prefix, base_dir = result
|
|
210
|
+
return module_join(mod_prefix, name), base_dir
|
|
211
|
+
|
|
212
|
+
def get_init_file(self, dir: str) -> str | None:
|
|
213
|
+
"""Check whether a directory contains a file named __init__.py[i].
|
|
214
|
+
|
|
215
|
+
If so, return the file's name (with dir prefixed). If not, return None.
|
|
216
|
+
|
|
217
|
+
This prefers .pyi over .py (because of the ordering of PY_EXTENSIONS).
|
|
218
|
+
"""
|
|
219
|
+
for ext in PY_EXTENSIONS:
|
|
220
|
+
f = os.path.join(dir, "__init__" + ext)
|
|
221
|
+
if self.fscache.isfile(f):
|
|
222
|
+
return f
|
|
223
|
+
if ext == ".py" and self.fscache.init_under_package_root(f):
|
|
224
|
+
return f
|
|
225
|
+
return None
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
def module_join(parent: str, child: str) -> str:
|
|
229
|
+
"""Join module ids, accounting for a possibly empty parent."""
|
|
230
|
+
if parent:
|
|
231
|
+
return parent + "." + child
|
|
232
|
+
return child
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
def strip_py(arg: str) -> str | None:
|
|
236
|
+
"""Strip a trailing .py or .pyi suffix.
|
|
237
|
+
|
|
238
|
+
Return None if no such suffix is found.
|
|
239
|
+
"""
|
|
240
|
+
for ext in PY_EXTENSIONS:
|
|
241
|
+
if arg.endswith(ext):
|
|
242
|
+
return arg[: -len(ext)]
|
|
243
|
+
return None
|
mypy/fixup.py
ADDED
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
"""Fix up various things after deserialization."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any, Final
|
|
6
|
+
|
|
7
|
+
from mypy.lookup import lookup_fully_qualified
|
|
8
|
+
from mypy.nodes import (
|
|
9
|
+
Block,
|
|
10
|
+
ClassDef,
|
|
11
|
+
Decorator,
|
|
12
|
+
FuncDef,
|
|
13
|
+
MypyFile,
|
|
14
|
+
OverloadedFuncDef,
|
|
15
|
+
ParamSpecExpr,
|
|
16
|
+
SymbolTable,
|
|
17
|
+
TypeAlias,
|
|
18
|
+
TypeInfo,
|
|
19
|
+
TypeVarExpr,
|
|
20
|
+
TypeVarTupleExpr,
|
|
21
|
+
Var,
|
|
22
|
+
)
|
|
23
|
+
from mypy.types import (
|
|
24
|
+
NOT_READY,
|
|
25
|
+
AnyType,
|
|
26
|
+
CallableType,
|
|
27
|
+
Instance,
|
|
28
|
+
LiteralType,
|
|
29
|
+
Overloaded,
|
|
30
|
+
Parameters,
|
|
31
|
+
ParamSpecType,
|
|
32
|
+
TupleType,
|
|
33
|
+
TypeAliasType,
|
|
34
|
+
TypedDictType,
|
|
35
|
+
TypeOfAny,
|
|
36
|
+
TypeType,
|
|
37
|
+
TypeVarTupleType,
|
|
38
|
+
TypeVarType,
|
|
39
|
+
TypeVisitor,
|
|
40
|
+
UnboundType,
|
|
41
|
+
UnionType,
|
|
42
|
+
UnpackType,
|
|
43
|
+
)
|
|
44
|
+
from mypy.visitor import NodeVisitor
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
# N.B: we do a allow_missing fixup when fixing up a fine-grained
|
|
48
|
+
# incremental cache load (since there may be cross-refs into deleted
|
|
49
|
+
# modules)
|
|
50
|
+
def fixup_module(tree: MypyFile, modules: dict[str, MypyFile], allow_missing: bool) -> None:
|
|
51
|
+
node_fixer = NodeFixer(modules, allow_missing)
|
|
52
|
+
node_fixer.visit_symbol_table(tree.names, tree.fullname)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
# TODO: Fix up .info when deserializing, i.e. much earlier.
|
|
56
|
+
class NodeFixer(NodeVisitor[None]):
|
|
57
|
+
current_info: TypeInfo | None = None
|
|
58
|
+
|
|
59
|
+
def __init__(self, modules: dict[str, MypyFile], allow_missing: bool) -> None:
|
|
60
|
+
self.modules = modules
|
|
61
|
+
self.allow_missing = allow_missing
|
|
62
|
+
self.type_fixer = TypeFixer(self.modules, allow_missing)
|
|
63
|
+
|
|
64
|
+
# NOTE: This method isn't (yet) part of the NodeVisitor API.
|
|
65
|
+
def visit_type_info(self, info: TypeInfo) -> None:
|
|
66
|
+
save_info = self.current_info
|
|
67
|
+
try:
|
|
68
|
+
self.current_info = info
|
|
69
|
+
if info.defn:
|
|
70
|
+
info.defn.accept(self)
|
|
71
|
+
if info.names:
|
|
72
|
+
self.visit_symbol_table(info.names, info.fullname)
|
|
73
|
+
if info.bases:
|
|
74
|
+
for base in info.bases:
|
|
75
|
+
base.accept(self.type_fixer)
|
|
76
|
+
if info._promote:
|
|
77
|
+
for p in info._promote:
|
|
78
|
+
p.accept(self.type_fixer)
|
|
79
|
+
if info.tuple_type:
|
|
80
|
+
info.tuple_type.accept(self.type_fixer)
|
|
81
|
+
info.update_tuple_type(info.tuple_type)
|
|
82
|
+
if info.special_alias:
|
|
83
|
+
info.special_alias.alias_tvars = list(info.defn.type_vars)
|
|
84
|
+
for i, t in enumerate(info.defn.type_vars):
|
|
85
|
+
if isinstance(t, TypeVarTupleType):
|
|
86
|
+
info.special_alias.tvar_tuple_index = i
|
|
87
|
+
if info.typeddict_type:
|
|
88
|
+
info.typeddict_type.accept(self.type_fixer)
|
|
89
|
+
info.update_typeddict_type(info.typeddict_type)
|
|
90
|
+
if info.special_alias:
|
|
91
|
+
info.special_alias.alias_tvars = list(info.defn.type_vars)
|
|
92
|
+
for i, t in enumerate(info.defn.type_vars):
|
|
93
|
+
if isinstance(t, TypeVarTupleType):
|
|
94
|
+
info.special_alias.tvar_tuple_index = i
|
|
95
|
+
if info.declared_metaclass:
|
|
96
|
+
info.declared_metaclass.accept(self.type_fixer)
|
|
97
|
+
if info.metaclass_type:
|
|
98
|
+
info.metaclass_type.accept(self.type_fixer)
|
|
99
|
+
if info.alt_promote:
|
|
100
|
+
info.alt_promote.accept(self.type_fixer)
|
|
101
|
+
instance = Instance(info, [])
|
|
102
|
+
# Hack: We may also need to add a backwards promotion (from int to native int),
|
|
103
|
+
# since it might not be serialized.
|
|
104
|
+
if instance not in info.alt_promote.type._promote:
|
|
105
|
+
info.alt_promote.type._promote.append(instance)
|
|
106
|
+
if info._mro_refs:
|
|
107
|
+
info.mro = [
|
|
108
|
+
lookup_fully_qualified_typeinfo(
|
|
109
|
+
self.modules, name, allow_missing=self.allow_missing
|
|
110
|
+
)
|
|
111
|
+
for name in info._mro_refs
|
|
112
|
+
]
|
|
113
|
+
info._mro_refs = None
|
|
114
|
+
finally:
|
|
115
|
+
self.current_info = save_info
|
|
116
|
+
|
|
117
|
+
# NOTE: This method *definitely* isn't part of the NodeVisitor API.
|
|
118
|
+
def visit_symbol_table(self, symtab: SymbolTable, table_fullname: str) -> None:
|
|
119
|
+
# Copy the items because we may mutate symtab.
|
|
120
|
+
for key, value in list(symtab.items()):
|
|
121
|
+
cross_ref = value.cross_ref
|
|
122
|
+
if cross_ref is not None: # Fix up cross-reference.
|
|
123
|
+
value.cross_ref = None
|
|
124
|
+
if cross_ref in self.modules:
|
|
125
|
+
value.node = self.modules[cross_ref]
|
|
126
|
+
else:
|
|
127
|
+
stnode = lookup_fully_qualified(
|
|
128
|
+
cross_ref, self.modules, raise_on_missing=not self.allow_missing
|
|
129
|
+
)
|
|
130
|
+
if stnode is not None:
|
|
131
|
+
if stnode is value:
|
|
132
|
+
# The node seems to refer to itself, which can mean that
|
|
133
|
+
# the target is a deleted submodule of the current module,
|
|
134
|
+
# and thus lookup falls back to the symbol table of the parent
|
|
135
|
+
# package. Here's how this may happen:
|
|
136
|
+
#
|
|
137
|
+
# pkg/__init__.py:
|
|
138
|
+
# from pkg import sub
|
|
139
|
+
#
|
|
140
|
+
# Now if pkg.sub is deleted, the pkg.sub symbol table entry
|
|
141
|
+
# appears to refer to itself. Replace the entry with a
|
|
142
|
+
# placeholder to avoid a crash. We can't delete the entry,
|
|
143
|
+
# as it would stop dependency propagation.
|
|
144
|
+
value.node = Var(key + "@deleted")
|
|
145
|
+
else:
|
|
146
|
+
assert stnode.node is not None, (table_fullname + "." + key, cross_ref)
|
|
147
|
+
value.node = stnode.node
|
|
148
|
+
elif not self.allow_missing:
|
|
149
|
+
assert False, f"Could not find cross-ref {cross_ref}"
|
|
150
|
+
else:
|
|
151
|
+
# We have a missing crossref in allow missing mode, need to put something
|
|
152
|
+
value.node = missing_info(self.modules)
|
|
153
|
+
else:
|
|
154
|
+
if isinstance(value.node, TypeInfo):
|
|
155
|
+
# TypeInfo has no accept(). TODO: Add it?
|
|
156
|
+
self.visit_type_info(value.node)
|
|
157
|
+
elif value.node is not None:
|
|
158
|
+
value.node.accept(self)
|
|
159
|
+
else:
|
|
160
|
+
assert False, f"Unexpected empty node {key!r}: {value}"
|
|
161
|
+
|
|
162
|
+
def visit_func_def(self, func: FuncDef) -> None:
|
|
163
|
+
if self.current_info is not None:
|
|
164
|
+
func.info = self.current_info
|
|
165
|
+
if func.type is not None:
|
|
166
|
+
func.type.accept(self.type_fixer)
|
|
167
|
+
|
|
168
|
+
def visit_overloaded_func_def(self, o: OverloadedFuncDef) -> None:
|
|
169
|
+
if self.current_info is not None:
|
|
170
|
+
o.info = self.current_info
|
|
171
|
+
if o.type:
|
|
172
|
+
o.type.accept(self.type_fixer)
|
|
173
|
+
for item in o.items:
|
|
174
|
+
item.accept(self)
|
|
175
|
+
if o.impl:
|
|
176
|
+
o.impl.accept(self)
|
|
177
|
+
|
|
178
|
+
def visit_decorator(self, d: Decorator) -> None:
|
|
179
|
+
if self.current_info is not None:
|
|
180
|
+
d.var.info = self.current_info
|
|
181
|
+
if d.func:
|
|
182
|
+
d.func.accept(self)
|
|
183
|
+
if d.var:
|
|
184
|
+
d.var.accept(self)
|
|
185
|
+
for node in d.decorators:
|
|
186
|
+
node.accept(self)
|
|
187
|
+
|
|
188
|
+
def visit_class_def(self, c: ClassDef) -> None:
|
|
189
|
+
for v in c.type_vars:
|
|
190
|
+
v.accept(self.type_fixer)
|
|
191
|
+
|
|
192
|
+
def visit_type_var_expr(self, tv: TypeVarExpr) -> None:
|
|
193
|
+
for value in tv.values:
|
|
194
|
+
value.accept(self.type_fixer)
|
|
195
|
+
tv.upper_bound.accept(self.type_fixer)
|
|
196
|
+
tv.default.accept(self.type_fixer)
|
|
197
|
+
|
|
198
|
+
def visit_paramspec_expr(self, p: ParamSpecExpr) -> None:
|
|
199
|
+
p.upper_bound.accept(self.type_fixer)
|
|
200
|
+
p.default.accept(self.type_fixer)
|
|
201
|
+
|
|
202
|
+
def visit_type_var_tuple_expr(self, tv: TypeVarTupleExpr) -> None:
|
|
203
|
+
tv.upper_bound.accept(self.type_fixer)
|
|
204
|
+
tv.tuple_fallback.accept(self.type_fixer)
|
|
205
|
+
tv.default.accept(self.type_fixer)
|
|
206
|
+
|
|
207
|
+
def visit_var(self, v: Var) -> None:
|
|
208
|
+
if self.current_info is not None:
|
|
209
|
+
v.info = self.current_info
|
|
210
|
+
if v.type is not None:
|
|
211
|
+
v.type.accept(self.type_fixer)
|
|
212
|
+
|
|
213
|
+
def visit_type_alias(self, a: TypeAlias) -> None:
|
|
214
|
+
a.target.accept(self.type_fixer)
|
|
215
|
+
for v in a.alias_tvars:
|
|
216
|
+
v.accept(self.type_fixer)
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
class TypeFixer(TypeVisitor[None]):
|
|
220
|
+
def __init__(self, modules: dict[str, MypyFile], allow_missing: bool) -> None:
|
|
221
|
+
self.modules = modules
|
|
222
|
+
self.allow_missing = allow_missing
|
|
223
|
+
|
|
224
|
+
def visit_instance(self, inst: Instance) -> None:
|
|
225
|
+
# TODO: Combine Instances that are exactly the same?
|
|
226
|
+
type_ref = inst.type_ref
|
|
227
|
+
if type_ref is None:
|
|
228
|
+
return # We've already been here.
|
|
229
|
+
inst.type_ref = None
|
|
230
|
+
inst.type = lookup_fully_qualified_typeinfo(
|
|
231
|
+
self.modules, type_ref, allow_missing=self.allow_missing
|
|
232
|
+
)
|
|
233
|
+
# TODO: Is this needed or redundant?
|
|
234
|
+
# Also fix up the bases, just in case.
|
|
235
|
+
for base in inst.type.bases:
|
|
236
|
+
if base.type is NOT_READY:
|
|
237
|
+
base.accept(self)
|
|
238
|
+
for a in inst.args:
|
|
239
|
+
a.accept(self)
|
|
240
|
+
if inst.last_known_value is not None:
|
|
241
|
+
inst.last_known_value.accept(self)
|
|
242
|
+
|
|
243
|
+
def visit_type_alias_type(self, t: TypeAliasType) -> None:
|
|
244
|
+
type_ref = t.type_ref
|
|
245
|
+
if type_ref is None:
|
|
246
|
+
return # We've already been here.
|
|
247
|
+
t.type_ref = None
|
|
248
|
+
t.alias = lookup_fully_qualified_alias(
|
|
249
|
+
self.modules, type_ref, allow_missing=self.allow_missing
|
|
250
|
+
)
|
|
251
|
+
for a in t.args:
|
|
252
|
+
a.accept(self)
|
|
253
|
+
|
|
254
|
+
def visit_any(self, o: Any) -> None:
|
|
255
|
+
pass # Nothing to descend into.
|
|
256
|
+
|
|
257
|
+
def visit_callable_type(self, ct: CallableType) -> None:
|
|
258
|
+
if ct.fallback:
|
|
259
|
+
ct.fallback.accept(self)
|
|
260
|
+
for argt in ct.arg_types:
|
|
261
|
+
# argt may be None, e.g. for __self in NamedTuple constructors.
|
|
262
|
+
if argt is not None:
|
|
263
|
+
argt.accept(self)
|
|
264
|
+
if ct.ret_type is not None:
|
|
265
|
+
ct.ret_type.accept(self)
|
|
266
|
+
for v in ct.variables:
|
|
267
|
+
v.accept(self)
|
|
268
|
+
for arg in ct.bound_args:
|
|
269
|
+
if arg:
|
|
270
|
+
arg.accept(self)
|
|
271
|
+
if ct.type_guard is not None:
|
|
272
|
+
ct.type_guard.accept(self)
|
|
273
|
+
|
|
274
|
+
def visit_overloaded(self, t: Overloaded) -> None:
|
|
275
|
+
for ct in t.items:
|
|
276
|
+
ct.accept(self)
|
|
277
|
+
|
|
278
|
+
def visit_erased_type(self, o: Any) -> None:
|
|
279
|
+
# This type should exist only temporarily during type inference
|
|
280
|
+
raise RuntimeError("Shouldn't get here", o)
|
|
281
|
+
|
|
282
|
+
def visit_deleted_type(self, o: Any) -> None:
|
|
283
|
+
pass # Nothing to descend into.
|
|
284
|
+
|
|
285
|
+
def visit_none_type(self, o: Any) -> None:
|
|
286
|
+
pass # Nothing to descend into.
|
|
287
|
+
|
|
288
|
+
def visit_uninhabited_type(self, o: Any) -> None:
|
|
289
|
+
pass # Nothing to descend into.
|
|
290
|
+
|
|
291
|
+
def visit_partial_type(self, o: Any) -> None:
|
|
292
|
+
raise RuntimeError("Shouldn't get here", o)
|
|
293
|
+
|
|
294
|
+
def visit_tuple_type(self, tt: TupleType) -> None:
|
|
295
|
+
if tt.items:
|
|
296
|
+
for it in tt.items:
|
|
297
|
+
it.accept(self)
|
|
298
|
+
if tt.partial_fallback is not None:
|
|
299
|
+
tt.partial_fallback.accept(self)
|
|
300
|
+
|
|
301
|
+
def visit_typeddict_type(self, tdt: TypedDictType) -> None:
|
|
302
|
+
if tdt.items:
|
|
303
|
+
for it in tdt.items.values():
|
|
304
|
+
it.accept(self)
|
|
305
|
+
if tdt.fallback is not None:
|
|
306
|
+
if tdt.fallback.type_ref is not None:
|
|
307
|
+
if (
|
|
308
|
+
lookup_fully_qualified(
|
|
309
|
+
tdt.fallback.type_ref,
|
|
310
|
+
self.modules,
|
|
311
|
+
raise_on_missing=not self.allow_missing,
|
|
312
|
+
)
|
|
313
|
+
is None
|
|
314
|
+
):
|
|
315
|
+
# We reject fake TypeInfos for TypedDict fallbacks because
|
|
316
|
+
# the latter are used in type checking and must be valid.
|
|
317
|
+
tdt.fallback.type_ref = "typing._TypedDict"
|
|
318
|
+
tdt.fallback.accept(self)
|
|
319
|
+
|
|
320
|
+
def visit_literal_type(self, lt: LiteralType) -> None:
|
|
321
|
+
lt.fallback.accept(self)
|
|
322
|
+
|
|
323
|
+
def visit_type_var(self, tvt: TypeVarType) -> None:
|
|
324
|
+
if tvt.values:
|
|
325
|
+
for vt in tvt.values:
|
|
326
|
+
vt.accept(self)
|
|
327
|
+
tvt.upper_bound.accept(self)
|
|
328
|
+
tvt.default.accept(self)
|
|
329
|
+
|
|
330
|
+
def visit_param_spec(self, p: ParamSpecType) -> None:
|
|
331
|
+
p.upper_bound.accept(self)
|
|
332
|
+
p.default.accept(self)
|
|
333
|
+
|
|
334
|
+
def visit_type_var_tuple(self, t: TypeVarTupleType) -> None:
|
|
335
|
+
t.tuple_fallback.accept(self)
|
|
336
|
+
t.upper_bound.accept(self)
|
|
337
|
+
t.default.accept(self)
|
|
338
|
+
|
|
339
|
+
def visit_unpack_type(self, u: UnpackType) -> None:
|
|
340
|
+
u.type.accept(self)
|
|
341
|
+
|
|
342
|
+
def visit_parameters(self, p: Parameters) -> None:
|
|
343
|
+
for argt in p.arg_types:
|
|
344
|
+
if argt is not None:
|
|
345
|
+
argt.accept(self)
|
|
346
|
+
for var in p.variables:
|
|
347
|
+
var.accept(self)
|
|
348
|
+
|
|
349
|
+
def visit_unbound_type(self, o: UnboundType) -> None:
|
|
350
|
+
for a in o.args:
|
|
351
|
+
a.accept(self)
|
|
352
|
+
|
|
353
|
+
def visit_union_type(self, ut: UnionType) -> None:
|
|
354
|
+
if ut.items:
|
|
355
|
+
for it in ut.items:
|
|
356
|
+
it.accept(self)
|
|
357
|
+
|
|
358
|
+
def visit_type_type(self, t: TypeType) -> None:
|
|
359
|
+
t.item.accept(self)
|
|
360
|
+
|
|
361
|
+
|
|
362
|
+
def lookup_fully_qualified_typeinfo(
|
|
363
|
+
modules: dict[str, MypyFile], name: str, *, allow_missing: bool
|
|
364
|
+
) -> TypeInfo:
|
|
365
|
+
stnode = lookup_fully_qualified(name, modules, raise_on_missing=not allow_missing)
|
|
366
|
+
node = stnode.node if stnode else None
|
|
367
|
+
if isinstance(node, TypeInfo):
|
|
368
|
+
return node
|
|
369
|
+
else:
|
|
370
|
+
# Looks like a missing TypeInfo during an initial daemon load, put something there
|
|
371
|
+
assert (
|
|
372
|
+
allow_missing
|
|
373
|
+
), "Should never get here in normal mode, got {}:{} instead of TypeInfo".format(
|
|
374
|
+
type(node).__name__, node.fullname if node else ""
|
|
375
|
+
)
|
|
376
|
+
return missing_info(modules)
|
|
377
|
+
|
|
378
|
+
|
|
379
|
+
def lookup_fully_qualified_alias(
|
|
380
|
+
modules: dict[str, MypyFile], name: str, *, allow_missing: bool
|
|
381
|
+
) -> TypeAlias:
|
|
382
|
+
stnode = lookup_fully_qualified(name, modules, raise_on_missing=not allow_missing)
|
|
383
|
+
node = stnode.node if stnode else None
|
|
384
|
+
if isinstance(node, TypeAlias):
|
|
385
|
+
return node
|
|
386
|
+
elif isinstance(node, TypeInfo):
|
|
387
|
+
if node.special_alias:
|
|
388
|
+
# Already fixed up.
|
|
389
|
+
return node.special_alias
|
|
390
|
+
if node.tuple_type:
|
|
391
|
+
alias = TypeAlias.from_tuple_type(node)
|
|
392
|
+
elif node.typeddict_type:
|
|
393
|
+
alias = TypeAlias.from_typeddict_type(node)
|
|
394
|
+
else:
|
|
395
|
+
assert allow_missing
|
|
396
|
+
return missing_alias()
|
|
397
|
+
node.special_alias = alias
|
|
398
|
+
return alias
|
|
399
|
+
else:
|
|
400
|
+
# Looks like a missing TypeAlias during an initial daemon load, put something there
|
|
401
|
+
assert (
|
|
402
|
+
allow_missing
|
|
403
|
+
), "Should never get here in normal mode, got {}:{} instead of TypeAlias".format(
|
|
404
|
+
type(node).__name__, node.fullname if node else ""
|
|
405
|
+
)
|
|
406
|
+
return missing_alias()
|
|
407
|
+
|
|
408
|
+
|
|
409
|
+
_SUGGESTION: Final = "<missing {}: *should* have gone away during fine-grained update>"
|
|
410
|
+
|
|
411
|
+
|
|
412
|
+
def missing_info(modules: dict[str, MypyFile]) -> TypeInfo:
|
|
413
|
+
suggestion = _SUGGESTION.format("info")
|
|
414
|
+
dummy_def = ClassDef(suggestion, Block([]))
|
|
415
|
+
dummy_def.fullname = suggestion
|
|
416
|
+
|
|
417
|
+
info = TypeInfo(SymbolTable(), dummy_def, "<missing>")
|
|
418
|
+
obj_type = lookup_fully_qualified_typeinfo(modules, "builtins.object", allow_missing=False)
|
|
419
|
+
info.bases = [Instance(obj_type, [])]
|
|
420
|
+
info.mro = [info, obj_type]
|
|
421
|
+
return info
|
|
422
|
+
|
|
423
|
+
|
|
424
|
+
def missing_alias() -> TypeAlias:
|
|
425
|
+
suggestion = _SUGGESTION.format("alias")
|
|
426
|
+
return TypeAlias(AnyType(TypeOfAny.special_form), suggestion, line=-1, column=-1)
|
mypy/freetree.py
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"""Generic node traverser visitor"""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from mypy.nodes import Block, MypyFile
|
|
6
|
+
from mypy.traverser import TraverserVisitor
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class TreeFreer(TraverserVisitor):
|
|
10
|
+
def visit_block(self, block: Block) -> None:
|
|
11
|
+
super().visit_block(block)
|
|
12
|
+
block.body.clear()
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def free_tree(tree: MypyFile) -> None:
|
|
16
|
+
"""Free all the ASTs associated with a module.
|
|
17
|
+
|
|
18
|
+
This needs to be done recursively, since symbol tables contain
|
|
19
|
+
references to definitions, so those won't be freed but we want their
|
|
20
|
+
contents to be.
|
|
21
|
+
"""
|
|
22
|
+
tree.accept(TreeFreer())
|
|
23
|
+
tree.defs.clear()
|