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/operators.py
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"""Information about Python operators"""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Final
|
|
6
|
+
|
|
7
|
+
# Map from binary operator id to related method name (in Python 3).
|
|
8
|
+
op_methods: Final = {
|
|
9
|
+
"+": "__add__",
|
|
10
|
+
"-": "__sub__",
|
|
11
|
+
"*": "__mul__",
|
|
12
|
+
"/": "__truediv__",
|
|
13
|
+
"%": "__mod__",
|
|
14
|
+
"divmod": "__divmod__",
|
|
15
|
+
"//": "__floordiv__",
|
|
16
|
+
"**": "__pow__",
|
|
17
|
+
"@": "__matmul__",
|
|
18
|
+
"&": "__and__",
|
|
19
|
+
"|": "__or__",
|
|
20
|
+
"^": "__xor__",
|
|
21
|
+
"<<": "__lshift__",
|
|
22
|
+
">>": "__rshift__",
|
|
23
|
+
"==": "__eq__",
|
|
24
|
+
"!=": "__ne__",
|
|
25
|
+
"<": "__lt__",
|
|
26
|
+
">=": "__ge__",
|
|
27
|
+
">": "__gt__",
|
|
28
|
+
"<=": "__le__",
|
|
29
|
+
"in": "__contains__",
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
op_methods_to_symbols: Final = {v: k for (k, v) in op_methods.items()}
|
|
33
|
+
|
|
34
|
+
ops_falling_back_to_cmp: Final = {"__ne__", "__eq__", "__lt__", "__le__", "__gt__", "__ge__"}
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
ops_with_inplace_method: Final = {
|
|
38
|
+
"+",
|
|
39
|
+
"-",
|
|
40
|
+
"*",
|
|
41
|
+
"/",
|
|
42
|
+
"%",
|
|
43
|
+
"//",
|
|
44
|
+
"**",
|
|
45
|
+
"@",
|
|
46
|
+
"&",
|
|
47
|
+
"|",
|
|
48
|
+
"^",
|
|
49
|
+
"<<",
|
|
50
|
+
">>",
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
inplace_operator_methods: Final = {"__i" + op_methods[op][2:] for op in ops_with_inplace_method}
|
|
54
|
+
|
|
55
|
+
reverse_op_methods: Final = {
|
|
56
|
+
"__add__": "__radd__",
|
|
57
|
+
"__sub__": "__rsub__",
|
|
58
|
+
"__mul__": "__rmul__",
|
|
59
|
+
"__truediv__": "__rtruediv__",
|
|
60
|
+
"__mod__": "__rmod__",
|
|
61
|
+
"__divmod__": "__rdivmod__",
|
|
62
|
+
"__floordiv__": "__rfloordiv__",
|
|
63
|
+
"__pow__": "__rpow__",
|
|
64
|
+
"__matmul__": "__rmatmul__",
|
|
65
|
+
"__and__": "__rand__",
|
|
66
|
+
"__or__": "__ror__",
|
|
67
|
+
"__xor__": "__rxor__",
|
|
68
|
+
"__lshift__": "__rlshift__",
|
|
69
|
+
"__rshift__": "__rrshift__",
|
|
70
|
+
"__eq__": "__eq__",
|
|
71
|
+
"__ne__": "__ne__",
|
|
72
|
+
"__lt__": "__gt__",
|
|
73
|
+
"__ge__": "__le__",
|
|
74
|
+
"__gt__": "__lt__",
|
|
75
|
+
"__le__": "__ge__",
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
reverse_op_method_names: Final = set(reverse_op_methods.values())
|
|
79
|
+
|
|
80
|
+
# Suppose we have some class A. When we do A() + A(), Python will only check
|
|
81
|
+
# the output of A().__add__(A()) and skip calling the __radd__ method entirely.
|
|
82
|
+
# This shortcut is used only for the following methods:
|
|
83
|
+
op_methods_that_shortcut: Final = {
|
|
84
|
+
"__add__",
|
|
85
|
+
"__sub__",
|
|
86
|
+
"__mul__",
|
|
87
|
+
"__truediv__",
|
|
88
|
+
"__mod__",
|
|
89
|
+
"__divmod__",
|
|
90
|
+
"__floordiv__",
|
|
91
|
+
"__pow__",
|
|
92
|
+
"__matmul__",
|
|
93
|
+
"__and__",
|
|
94
|
+
"__or__",
|
|
95
|
+
"__xor__",
|
|
96
|
+
"__lshift__",
|
|
97
|
+
"__rshift__",
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
normal_from_reverse_op: Final = {m: n for n, m in reverse_op_methods.items()}
|
|
101
|
+
reverse_op_method_set: Final = set(reverse_op_methods.values())
|
|
102
|
+
|
|
103
|
+
unary_op_methods: Final = {"-": "__neg__", "+": "__pos__", "~": "__invert__"}
|
|
104
|
+
|
|
105
|
+
int_op_to_method: Final = {
|
|
106
|
+
"==": int.__eq__,
|
|
107
|
+
"is": int.__eq__,
|
|
108
|
+
"<": int.__lt__,
|
|
109
|
+
"<=": int.__le__,
|
|
110
|
+
"!=": int.__ne__,
|
|
111
|
+
"is not": int.__ne__,
|
|
112
|
+
">": int.__gt__,
|
|
113
|
+
">=": int.__ge__,
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
flip_ops: Final = {"<": ">", "<=": ">=", ">": "<", ">=": "<="}
|
|
117
|
+
neg_ops: Final = {
|
|
118
|
+
"==": "!=",
|
|
119
|
+
"!=": "==",
|
|
120
|
+
"is": "is not",
|
|
121
|
+
"is not": "is",
|
|
122
|
+
"<": ">=",
|
|
123
|
+
"<=": ">",
|
|
124
|
+
">": "<=",
|
|
125
|
+
">=": "<",
|
|
126
|
+
}
|
mypy/options.py
ADDED
|
@@ -0,0 +1,556 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import pprint
|
|
4
|
+
import re
|
|
5
|
+
import sys
|
|
6
|
+
import sysconfig
|
|
7
|
+
from typing import Any, Callable, Final, Mapping, Pattern
|
|
8
|
+
|
|
9
|
+
from mypy import defaults
|
|
10
|
+
from mypy.errorcodes import ErrorCode, error_codes
|
|
11
|
+
from mypy.util import get_class_descriptors, replace_object_state
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class BuildType:
|
|
15
|
+
STANDARD: Final = 0
|
|
16
|
+
MODULE: Final = 1
|
|
17
|
+
PROGRAM_TEXT: Final = 2
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
PER_MODULE_OPTIONS: Final = {
|
|
21
|
+
# Please keep this list sorted
|
|
22
|
+
"allow_redefinition",
|
|
23
|
+
"allow_untyped_globals",
|
|
24
|
+
"always_false",
|
|
25
|
+
"always_true",
|
|
26
|
+
"check_untyped_defs",
|
|
27
|
+
"debug_cache",
|
|
28
|
+
"disable_error_code",
|
|
29
|
+
"disabled_error_codes",
|
|
30
|
+
"disallow_any_decorated",
|
|
31
|
+
"disallow_any_explicit",
|
|
32
|
+
"disallow_any_expr",
|
|
33
|
+
"disallow_any_generics",
|
|
34
|
+
"disallow_any_unimported",
|
|
35
|
+
"disallow_incomplete_defs",
|
|
36
|
+
"disallow_subclassing_any",
|
|
37
|
+
"disallow_untyped_calls",
|
|
38
|
+
"disallow_untyped_decorators",
|
|
39
|
+
"disallow_untyped_defs",
|
|
40
|
+
"enable_error_code",
|
|
41
|
+
"enabled_error_codes",
|
|
42
|
+
"extra_checks",
|
|
43
|
+
"follow_imports_for_stubs",
|
|
44
|
+
"follow_imports",
|
|
45
|
+
"ignore_errors",
|
|
46
|
+
"ignore_missing_imports",
|
|
47
|
+
"implicit_optional",
|
|
48
|
+
"implicit_reexport",
|
|
49
|
+
"local_partial_types",
|
|
50
|
+
"mypyc",
|
|
51
|
+
"strict_concatenate",
|
|
52
|
+
"strict_equality",
|
|
53
|
+
"strict_optional",
|
|
54
|
+
"warn_no_return",
|
|
55
|
+
"warn_return_any",
|
|
56
|
+
"warn_unreachable",
|
|
57
|
+
"warn_unused_ignores",
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
OPTIONS_AFFECTING_CACHE: Final = (
|
|
61
|
+
PER_MODULE_OPTIONS
|
|
62
|
+
| {
|
|
63
|
+
"platform",
|
|
64
|
+
"bazel",
|
|
65
|
+
"old_type_inference",
|
|
66
|
+
"plugins",
|
|
67
|
+
"disable_bytearray_promotion",
|
|
68
|
+
"disable_memoryview_promotion",
|
|
69
|
+
}
|
|
70
|
+
) - {"debug_cache"}
|
|
71
|
+
|
|
72
|
+
# Features that are currently (or were recently) incomplete/experimental
|
|
73
|
+
TYPE_VAR_TUPLE: Final = "TypeVarTuple"
|
|
74
|
+
UNPACK: Final = "Unpack"
|
|
75
|
+
PRECISE_TUPLE_TYPES: Final = "PreciseTupleTypes"
|
|
76
|
+
INCOMPLETE_FEATURES: Final = frozenset((PRECISE_TUPLE_TYPES,))
|
|
77
|
+
COMPLETE_FEATURES: Final = frozenset((TYPE_VAR_TUPLE, UNPACK))
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
class Options:
|
|
81
|
+
"""Options collected from flags."""
|
|
82
|
+
|
|
83
|
+
def __init__(self) -> None:
|
|
84
|
+
# Cache for clone_for_module()
|
|
85
|
+
self._per_module_cache: dict[str, Options] | None = None
|
|
86
|
+
|
|
87
|
+
# -- build options --
|
|
88
|
+
self.build_type = BuildType.STANDARD
|
|
89
|
+
self.python_version: tuple[int, int] = sys.version_info[:2]
|
|
90
|
+
# The executable used to search for PEP 561 packages. If this is None,
|
|
91
|
+
# then mypy does not search for PEP 561 packages.
|
|
92
|
+
self.python_executable: str | None = sys.executable
|
|
93
|
+
|
|
94
|
+
# When cross compiling to emscripten, we need to rely on MACHDEP because
|
|
95
|
+
# sys.platform is the host build platform, not emscripten.
|
|
96
|
+
MACHDEP = sysconfig.get_config_var("MACHDEP")
|
|
97
|
+
if MACHDEP == "emscripten":
|
|
98
|
+
self.platform = MACHDEP
|
|
99
|
+
else:
|
|
100
|
+
self.platform = sys.platform
|
|
101
|
+
|
|
102
|
+
self.custom_typing_module: str | None = None
|
|
103
|
+
self.custom_typeshed_dir: str | None = None
|
|
104
|
+
# The abspath() version of the above, we compute it once as an optimization.
|
|
105
|
+
self.abs_custom_typeshed_dir: str | None = None
|
|
106
|
+
self.mypy_path: list[str] = []
|
|
107
|
+
self.report_dirs: dict[str, str] = {}
|
|
108
|
+
# Show errors in PEP 561 packages/site-packages modules
|
|
109
|
+
self.no_silence_site_packages = False
|
|
110
|
+
self.no_site_packages = False
|
|
111
|
+
self.ignore_missing_imports = False
|
|
112
|
+
# Is ignore_missing_imports set in a per-module section
|
|
113
|
+
self.ignore_missing_imports_per_module = False
|
|
114
|
+
self.follow_imports = "normal" # normal|silent|skip|error
|
|
115
|
+
# Whether to respect the follow_imports setting even for stub files.
|
|
116
|
+
# Intended to be used for disabling specific stubs.
|
|
117
|
+
self.follow_imports_for_stubs = False
|
|
118
|
+
# PEP 420 namespace packages
|
|
119
|
+
# This allows definitions of packages without __init__.py and allows packages to span
|
|
120
|
+
# multiple directories. This flag affects both import discovery and the association of
|
|
121
|
+
# input files/modules/packages to the relevant file and fully qualified module name.
|
|
122
|
+
self.namespace_packages = True
|
|
123
|
+
# Use current directory and MYPYPATH to determine fully qualified module names of files
|
|
124
|
+
# passed by automatically considering their subdirectories as packages. This is only
|
|
125
|
+
# relevant if namespace packages are enabled, since otherwise examining __init__.py's is
|
|
126
|
+
# sufficient to determine module names for files. As a possible alternative, add a single
|
|
127
|
+
# top-level __init__.py to your packages.
|
|
128
|
+
self.explicit_package_bases = False
|
|
129
|
+
# File names, directory names or subpaths to avoid checking
|
|
130
|
+
self.exclude: list[str] = []
|
|
131
|
+
|
|
132
|
+
# disallow_any options
|
|
133
|
+
self.disallow_any_generics = False
|
|
134
|
+
self.disallow_any_unimported = False
|
|
135
|
+
self.disallow_any_expr = False
|
|
136
|
+
self.disallow_any_decorated = False
|
|
137
|
+
self.disallow_any_explicit = False
|
|
138
|
+
|
|
139
|
+
# Disallow calling untyped functions from typed ones
|
|
140
|
+
self.disallow_untyped_calls = False
|
|
141
|
+
|
|
142
|
+
# Always allow untyped calls for function coming from modules/packages
|
|
143
|
+
# in this list (each item effectively acts as a prefix match)
|
|
144
|
+
self.untyped_calls_exclude: list[str] = []
|
|
145
|
+
|
|
146
|
+
# Disallow defining untyped (or incompletely typed) functions
|
|
147
|
+
self.disallow_untyped_defs = False
|
|
148
|
+
|
|
149
|
+
# Disallow defining incompletely typed functions
|
|
150
|
+
self.disallow_incomplete_defs = False
|
|
151
|
+
|
|
152
|
+
# Type check unannotated functions
|
|
153
|
+
self.check_untyped_defs = False
|
|
154
|
+
|
|
155
|
+
# Disallow decorating typed functions with untyped decorators
|
|
156
|
+
self.disallow_untyped_decorators = False
|
|
157
|
+
|
|
158
|
+
# Disallow subclassing values of type 'Any'
|
|
159
|
+
self.disallow_subclassing_any = False
|
|
160
|
+
|
|
161
|
+
# Also check typeshed for missing annotations
|
|
162
|
+
self.warn_incomplete_stub = False
|
|
163
|
+
|
|
164
|
+
# Warn about casting an expression to its inferred type
|
|
165
|
+
self.warn_redundant_casts = False
|
|
166
|
+
|
|
167
|
+
# Warn about falling off the end of a function returning non-None
|
|
168
|
+
self.warn_no_return = True
|
|
169
|
+
|
|
170
|
+
# Warn about returning objects of type Any when the function is
|
|
171
|
+
# declared with a precise type
|
|
172
|
+
self.warn_return_any = False
|
|
173
|
+
|
|
174
|
+
# Warn about unused '# type: ignore' comments
|
|
175
|
+
self.warn_unused_ignores = False
|
|
176
|
+
|
|
177
|
+
# Warn about unused '[mypy-<pattern>]' or '[[tool.mypy.overrides]]' config sections
|
|
178
|
+
self.warn_unused_configs = False
|
|
179
|
+
|
|
180
|
+
# Files in which to ignore all non-fatal errors
|
|
181
|
+
self.ignore_errors = False
|
|
182
|
+
|
|
183
|
+
# Apply strict None checking
|
|
184
|
+
self.strict_optional = True
|
|
185
|
+
|
|
186
|
+
# Show "note: In function "foo":" messages.
|
|
187
|
+
self.show_error_context = False
|
|
188
|
+
|
|
189
|
+
# Use nicer output (when possible).
|
|
190
|
+
self.color_output = True
|
|
191
|
+
self.error_summary = True
|
|
192
|
+
|
|
193
|
+
# Assume arguments with default values of None are Optional
|
|
194
|
+
self.implicit_optional = False
|
|
195
|
+
|
|
196
|
+
# Don't re-export names unless they are imported with `from ... as ...`
|
|
197
|
+
self.implicit_reexport = True
|
|
198
|
+
|
|
199
|
+
# Suppress toplevel errors caused by missing annotations
|
|
200
|
+
self.allow_untyped_globals = False
|
|
201
|
+
|
|
202
|
+
# Allow variable to be redefined with an arbitrary type in the same block
|
|
203
|
+
# and the same nesting level as the initialization
|
|
204
|
+
self.allow_redefinition = False
|
|
205
|
+
|
|
206
|
+
# Prohibit equality, identity, and container checks for non-overlapping types.
|
|
207
|
+
# This makes 1 == '1', 1 in ['1'], and 1 is '1' errors.
|
|
208
|
+
self.strict_equality = False
|
|
209
|
+
|
|
210
|
+
# Deprecated, use extra_checks instead.
|
|
211
|
+
self.strict_concatenate = False
|
|
212
|
+
|
|
213
|
+
# Enable additional checks that are technically correct but impractical.
|
|
214
|
+
self.extra_checks = False
|
|
215
|
+
|
|
216
|
+
# Report an error for any branches inferred to be unreachable as a result of
|
|
217
|
+
# type analysis.
|
|
218
|
+
self.warn_unreachable = False
|
|
219
|
+
|
|
220
|
+
# Variable names considered True
|
|
221
|
+
self.always_true: list[str] = []
|
|
222
|
+
|
|
223
|
+
# Variable names considered False
|
|
224
|
+
self.always_false: list[str] = []
|
|
225
|
+
|
|
226
|
+
# Error codes to disable
|
|
227
|
+
self.disable_error_code: list[str] = []
|
|
228
|
+
self.disabled_error_codes: set[ErrorCode] = set()
|
|
229
|
+
|
|
230
|
+
# Error codes to enable
|
|
231
|
+
self.enable_error_code: list[str] = []
|
|
232
|
+
self.enabled_error_codes: set[ErrorCode] = set()
|
|
233
|
+
|
|
234
|
+
# Use script name instead of __main__
|
|
235
|
+
self.scripts_are_modules = False
|
|
236
|
+
|
|
237
|
+
# Config file name
|
|
238
|
+
self.config_file: str | None = None
|
|
239
|
+
|
|
240
|
+
# A filename containing a JSON mapping from filenames to
|
|
241
|
+
# mtime/size/hash arrays, used to avoid having to recalculate
|
|
242
|
+
# source hashes as often.
|
|
243
|
+
self.quickstart_file: str | None = None
|
|
244
|
+
|
|
245
|
+
# A comma-separated list of files/directories for mypy to type check;
|
|
246
|
+
# supports globbing
|
|
247
|
+
self.files: list[str] | None = None
|
|
248
|
+
|
|
249
|
+
# A list of packages for mypy to type check
|
|
250
|
+
self.packages: list[str] | None = None
|
|
251
|
+
|
|
252
|
+
# A list of modules for mypy to type check
|
|
253
|
+
self.modules: list[str] | None = None
|
|
254
|
+
|
|
255
|
+
# Write junit.xml to given file
|
|
256
|
+
self.junit_xml: str | None = None
|
|
257
|
+
|
|
258
|
+
self.junit_format: str = "global" # global|per_file
|
|
259
|
+
|
|
260
|
+
# Caching and incremental checking options
|
|
261
|
+
self.incremental = True
|
|
262
|
+
self.cache_dir = defaults.CACHE_DIR
|
|
263
|
+
self.sqlite_cache = False
|
|
264
|
+
self.debug_cache = False
|
|
265
|
+
self.skip_version_check = False
|
|
266
|
+
self.skip_cache_mtime_checks = False
|
|
267
|
+
self.fine_grained_incremental = False
|
|
268
|
+
# Include fine-grained dependencies in written cache files
|
|
269
|
+
self.cache_fine_grained = False
|
|
270
|
+
# Read cache files in fine-grained incremental mode (cache must include dependencies)
|
|
271
|
+
self.use_fine_grained_cache = False
|
|
272
|
+
|
|
273
|
+
# Run tree.serialize() even if cache generation is disabled
|
|
274
|
+
self.debug_serialize = False
|
|
275
|
+
|
|
276
|
+
# Tune certain behaviors when being used as a front-end to mypyc. Set per-module
|
|
277
|
+
# in modules being compiled. Not in the config file or command line.
|
|
278
|
+
self.mypyc = False
|
|
279
|
+
|
|
280
|
+
# An internal flag to modify some type-checking logic while
|
|
281
|
+
# running inspections (e.g. don't expand function definitions).
|
|
282
|
+
# Not in the config file or command line.
|
|
283
|
+
self.inspections = False
|
|
284
|
+
|
|
285
|
+
# Disable the memory optimization of freeing ASTs when
|
|
286
|
+
# possible. This isn't exposed as a command line option
|
|
287
|
+
# because it is intended for software integrating with
|
|
288
|
+
# mypy. (Like mypyc.)
|
|
289
|
+
self.preserve_asts = False
|
|
290
|
+
|
|
291
|
+
# If True, function and class docstrings will be extracted and retained.
|
|
292
|
+
# This isn't exposed as a command line option
|
|
293
|
+
# because it is intended for software integrating with
|
|
294
|
+
# mypy. (Like stubgen.)
|
|
295
|
+
self.include_docstrings = False
|
|
296
|
+
|
|
297
|
+
# Paths of user plugins
|
|
298
|
+
self.plugins: list[str] = []
|
|
299
|
+
|
|
300
|
+
# Per-module options (raw)
|
|
301
|
+
self.per_module_options: dict[str, dict[str, object]] = {}
|
|
302
|
+
self._glob_options: list[tuple[str, Pattern[str]]] = []
|
|
303
|
+
self.unused_configs: set[str] = set()
|
|
304
|
+
|
|
305
|
+
# -- development options --
|
|
306
|
+
self.verbosity = 0 # More verbose messages (for troubleshooting)
|
|
307
|
+
self.pdb = False
|
|
308
|
+
self.show_traceback = False
|
|
309
|
+
self.raise_exceptions = False
|
|
310
|
+
self.dump_type_stats = False
|
|
311
|
+
self.dump_inference_stats = False
|
|
312
|
+
self.dump_build_stats = False
|
|
313
|
+
self.enable_incomplete_feature: list[str] = []
|
|
314
|
+
self.timing_stats: str | None = None
|
|
315
|
+
self.line_checking_stats: str | None = None
|
|
316
|
+
|
|
317
|
+
# -- test options --
|
|
318
|
+
# Stop after the semantic analysis phase
|
|
319
|
+
self.semantic_analysis_only = False
|
|
320
|
+
|
|
321
|
+
# Use stub builtins fixtures to speed up tests
|
|
322
|
+
self.use_builtins_fixtures = False
|
|
323
|
+
|
|
324
|
+
# This should only be set when running certain mypy tests.
|
|
325
|
+
# Use this sparingly to avoid tests diverging from non-test behavior.
|
|
326
|
+
self.test_env = False
|
|
327
|
+
|
|
328
|
+
# -- experimental options --
|
|
329
|
+
self.shadow_file: list[list[str]] | None = None
|
|
330
|
+
self.show_column_numbers: bool = False
|
|
331
|
+
self.show_error_end: bool = False
|
|
332
|
+
self.hide_error_codes = False
|
|
333
|
+
self.show_error_code_links = False
|
|
334
|
+
# Use soft word wrap and show trimmed source snippets with error location markers.
|
|
335
|
+
self.pretty = False
|
|
336
|
+
self.dump_graph = False
|
|
337
|
+
self.dump_deps = False
|
|
338
|
+
self.logical_deps = False
|
|
339
|
+
# If True, partial types can't span a module top level and a function
|
|
340
|
+
self.local_partial_types = False
|
|
341
|
+
# Some behaviors are changed when using Bazel (https://bazel.build).
|
|
342
|
+
self.bazel = False
|
|
343
|
+
# If True, export inferred types for all expressions as BuildResult.types
|
|
344
|
+
self.export_types = False
|
|
345
|
+
# List of package roots -- directories under these are packages even
|
|
346
|
+
# if they don't have __init__.py.
|
|
347
|
+
self.package_root: list[str] = []
|
|
348
|
+
self.cache_map: dict[str, tuple[str, str]] = {}
|
|
349
|
+
# Don't properly free objects on exit, just kill the current process.
|
|
350
|
+
self.fast_exit = True
|
|
351
|
+
# fast path for finding modules from source set
|
|
352
|
+
self.fast_module_lookup = False
|
|
353
|
+
# Allow empty function bodies even if it is not safe, used for testing only.
|
|
354
|
+
self.allow_empty_bodies = False
|
|
355
|
+
# Used to transform source code before parsing if not None
|
|
356
|
+
# TODO: Make the type precise (AnyStr -> AnyStr)
|
|
357
|
+
self.transform_source: Callable[[Any], Any] | None = None
|
|
358
|
+
# Print full path to each file in the report.
|
|
359
|
+
self.show_absolute_path: bool = False
|
|
360
|
+
# Install missing stub packages if True
|
|
361
|
+
self.install_types = False
|
|
362
|
+
# Install missing stub packages in non-interactive mode (don't prompt for
|
|
363
|
+
# confirmation, and don't show any errors)
|
|
364
|
+
self.non_interactive = False
|
|
365
|
+
# When we encounter errors that may cause many additional errors,
|
|
366
|
+
# skip most errors after this many messages have been reported.
|
|
367
|
+
# -1 means unlimited.
|
|
368
|
+
self.many_errors_threshold = defaults.MANY_ERRORS_THRESHOLD
|
|
369
|
+
# Disable new experimental type inference algorithm.
|
|
370
|
+
self.old_type_inference = False
|
|
371
|
+
# Deprecated reverse version of the above, do not use.
|
|
372
|
+
self.new_type_inference = False
|
|
373
|
+
# Export line-level, limited, fine-grained dependency information in cache data
|
|
374
|
+
# (undocumented feature).
|
|
375
|
+
self.export_ref_info = False
|
|
376
|
+
|
|
377
|
+
self.disable_bytearray_promotion = False
|
|
378
|
+
self.disable_memoryview_promotion = False
|
|
379
|
+
|
|
380
|
+
self.force_uppercase_builtins = False
|
|
381
|
+
self.force_union_syntax = False
|
|
382
|
+
|
|
383
|
+
def use_lowercase_names(self) -> bool:
|
|
384
|
+
if self.python_version >= (3, 9):
|
|
385
|
+
return not self.force_uppercase_builtins
|
|
386
|
+
return False
|
|
387
|
+
|
|
388
|
+
def use_or_syntax(self) -> bool:
|
|
389
|
+
if self.python_version >= (3, 10):
|
|
390
|
+
return not self.force_union_syntax
|
|
391
|
+
return False
|
|
392
|
+
|
|
393
|
+
def use_star_unpack(self) -> bool:
|
|
394
|
+
return self.python_version >= (3, 11)
|
|
395
|
+
|
|
396
|
+
# To avoid breaking plugin compatibility, keep providing new_semantic_analyzer
|
|
397
|
+
@property
|
|
398
|
+
def new_semantic_analyzer(self) -> bool:
|
|
399
|
+
return True
|
|
400
|
+
|
|
401
|
+
def snapshot(self) -> dict[str, object]:
|
|
402
|
+
"""Produce a comparable snapshot of this Option"""
|
|
403
|
+
# Under mypyc, we don't have a __dict__, so we need to do worse things.
|
|
404
|
+
d = dict(getattr(self, "__dict__", ()))
|
|
405
|
+
for k in get_class_descriptors(Options):
|
|
406
|
+
if hasattr(self, k) and k != "new_semantic_analyzer":
|
|
407
|
+
d[k] = getattr(self, k)
|
|
408
|
+
# Remove private attributes from snapshot
|
|
409
|
+
d = {k: v for k, v in d.items() if not k.startswith("_")}
|
|
410
|
+
return d
|
|
411
|
+
|
|
412
|
+
def __repr__(self) -> str:
|
|
413
|
+
return f"Options({pprint.pformat(self.snapshot())})"
|
|
414
|
+
|
|
415
|
+
def apply_changes(self, changes: dict[str, object]) -> Options:
|
|
416
|
+
# Note: effects of this method *must* be idempotent.
|
|
417
|
+
new_options = Options()
|
|
418
|
+
# Under mypyc, we don't have a __dict__, so we need to do worse things.
|
|
419
|
+
replace_object_state(new_options, self, copy_dict=True)
|
|
420
|
+
for key, value in changes.items():
|
|
421
|
+
setattr(new_options, key, value)
|
|
422
|
+
if changes.get("ignore_missing_imports"):
|
|
423
|
+
# This is the only option for which a per-module and a global
|
|
424
|
+
# option sometimes beheave differently.
|
|
425
|
+
new_options.ignore_missing_imports_per_module = True
|
|
426
|
+
|
|
427
|
+
# These two act as overrides, so apply them when cloning.
|
|
428
|
+
# Similar to global codes enabling overrides disabling, so we start from latter.
|
|
429
|
+
new_options.disabled_error_codes = self.disabled_error_codes.copy()
|
|
430
|
+
new_options.enabled_error_codes = self.enabled_error_codes.copy()
|
|
431
|
+
for code_str in new_options.disable_error_code:
|
|
432
|
+
code = error_codes[code_str]
|
|
433
|
+
new_options.disabled_error_codes.add(code)
|
|
434
|
+
new_options.enabled_error_codes.discard(code)
|
|
435
|
+
for code_str in new_options.enable_error_code:
|
|
436
|
+
code = error_codes[code_str]
|
|
437
|
+
new_options.enabled_error_codes.add(code)
|
|
438
|
+
new_options.disabled_error_codes.discard(code)
|
|
439
|
+
|
|
440
|
+
return new_options
|
|
441
|
+
|
|
442
|
+
def compare_stable(self, other_snapshot: dict[str, object]) -> bool:
|
|
443
|
+
"""Compare options in a way that is stable for snapshot() -> apply_changes() roundtrip.
|
|
444
|
+
|
|
445
|
+
This is needed because apply_changes() has non-trivial effects for some flags, so
|
|
446
|
+
Options().apply_changes(options.snapshot()) may result in a (slightly) different object.
|
|
447
|
+
"""
|
|
448
|
+
return (
|
|
449
|
+
Options().apply_changes(self.snapshot()).snapshot()
|
|
450
|
+
== Options().apply_changes(other_snapshot).snapshot()
|
|
451
|
+
)
|
|
452
|
+
|
|
453
|
+
def build_per_module_cache(self) -> None:
|
|
454
|
+
self._per_module_cache = {}
|
|
455
|
+
|
|
456
|
+
# Config precedence is as follows:
|
|
457
|
+
# 1. Concrete section names: foo.bar.baz
|
|
458
|
+
# 2. "Unstructured" glob patterns: foo.*.baz, in the order
|
|
459
|
+
# they appear in the file (last wins)
|
|
460
|
+
# 3. "Well-structured" wildcard patterns: foo.bar.*, in specificity order.
|
|
461
|
+
|
|
462
|
+
# Since structured configs inherit from structured configs above them in the hierarchy,
|
|
463
|
+
# we need to process per-module configs in a careful order.
|
|
464
|
+
# We have to process foo.* before foo.bar.* before foo.bar,
|
|
465
|
+
# and we need to apply *.bar to foo.bar but not to foo.bar.*.
|
|
466
|
+
# To do this, process all well-structured glob configs before non-glob configs and
|
|
467
|
+
# exploit the fact that foo.* sorts earlier ASCIIbetically (unicodebetically?)
|
|
468
|
+
# than foo.bar.*.
|
|
469
|
+
# (A section being "processed last" results in its config "winning".)
|
|
470
|
+
# Unstructured glob configs are stored and are all checked for each module.
|
|
471
|
+
unstructured_glob_keys = [k for k in self.per_module_options.keys() if "*" in k[:-1]]
|
|
472
|
+
structured_keys = [k for k in self.per_module_options.keys() if "*" not in k[:-1]]
|
|
473
|
+
wildcards = sorted(k for k in structured_keys if k.endswith(".*"))
|
|
474
|
+
concrete = [k for k in structured_keys if not k.endswith(".*")]
|
|
475
|
+
|
|
476
|
+
for glob in unstructured_glob_keys:
|
|
477
|
+
self._glob_options.append((glob, self.compile_glob(glob)))
|
|
478
|
+
|
|
479
|
+
# We (for ease of implementation) treat unstructured glob
|
|
480
|
+
# sections as used if any real modules use them or if any
|
|
481
|
+
# concrete config sections use them. This means we need to
|
|
482
|
+
# track which get used while constructing.
|
|
483
|
+
self.unused_configs = set(unstructured_glob_keys)
|
|
484
|
+
|
|
485
|
+
for key in wildcards + concrete:
|
|
486
|
+
# Find what the options for this key would be, just based
|
|
487
|
+
# on inheriting from parent configs.
|
|
488
|
+
options = self.clone_for_module(key)
|
|
489
|
+
# And then update it with its per-module options.
|
|
490
|
+
self._per_module_cache[key] = options.apply_changes(self.per_module_options[key])
|
|
491
|
+
|
|
492
|
+
# Add the more structured sections into unused configs, since
|
|
493
|
+
# they only count as used if actually used by a real module.
|
|
494
|
+
self.unused_configs.update(structured_keys)
|
|
495
|
+
|
|
496
|
+
def clone_for_module(self, module: str) -> Options:
|
|
497
|
+
"""Create an Options object that incorporates per-module options.
|
|
498
|
+
|
|
499
|
+
NOTE: Once this method is called all Options objects should be
|
|
500
|
+
considered read-only, else the caching might be incorrect.
|
|
501
|
+
"""
|
|
502
|
+
if self._per_module_cache is None:
|
|
503
|
+
self.build_per_module_cache()
|
|
504
|
+
assert self._per_module_cache is not None
|
|
505
|
+
|
|
506
|
+
# If the module just directly has a config entry, use it.
|
|
507
|
+
if module in self._per_module_cache:
|
|
508
|
+
self.unused_configs.discard(module)
|
|
509
|
+
return self._per_module_cache[module]
|
|
510
|
+
|
|
511
|
+
# If not, search for glob paths at all the parents. So if we are looking for
|
|
512
|
+
# options for foo.bar.baz, we search foo.bar.baz.*, foo.bar.*, foo.*,
|
|
513
|
+
# in that order, looking for an entry.
|
|
514
|
+
# This is technically quadratic in the length of the path, but module paths
|
|
515
|
+
# don't actually get all that long.
|
|
516
|
+
options = self
|
|
517
|
+
path = module.split(".")
|
|
518
|
+
for i in range(len(path), 0, -1):
|
|
519
|
+
key = ".".join(path[:i] + ["*"])
|
|
520
|
+
if key in self._per_module_cache:
|
|
521
|
+
self.unused_configs.discard(key)
|
|
522
|
+
options = self._per_module_cache[key]
|
|
523
|
+
break
|
|
524
|
+
|
|
525
|
+
# OK and *now* we need to look for unstructured glob matches.
|
|
526
|
+
# We only do this for concrete modules, not structured wildcards.
|
|
527
|
+
if not module.endswith(".*"):
|
|
528
|
+
for key, pattern in self._glob_options:
|
|
529
|
+
if pattern.match(module):
|
|
530
|
+
self.unused_configs.discard(key)
|
|
531
|
+
options = options.apply_changes(self.per_module_options[key])
|
|
532
|
+
|
|
533
|
+
# We could update the cache to directly point to modules once
|
|
534
|
+
# they have been looked up, but in testing this made things
|
|
535
|
+
# slower and not faster, so we don't bother.
|
|
536
|
+
|
|
537
|
+
return options
|
|
538
|
+
|
|
539
|
+
def compile_glob(self, s: str) -> Pattern[str]:
|
|
540
|
+
# Compile one of the glob patterns to a regex so that '.*' can
|
|
541
|
+
# match *zero or more* module sections. This means we compile
|
|
542
|
+
# '.*' into '(\..*)?'.
|
|
543
|
+
parts = s.split(".")
|
|
544
|
+
expr = re.escape(parts[0]) if parts[0] != "*" else ".*"
|
|
545
|
+
for part in parts[1:]:
|
|
546
|
+
expr += re.escape("." + part) if part != "*" else r"(\..*)?"
|
|
547
|
+
return re.compile(expr + "\\Z")
|
|
548
|
+
|
|
549
|
+
def select_options_affecting_cache(self) -> Mapping[str, object]:
|
|
550
|
+
result: dict[str, object] = {}
|
|
551
|
+
for opt in OPTIONS_AFFECTING_CACHE:
|
|
552
|
+
val = getattr(self, opt)
|
|
553
|
+
if opt in ("disabled_error_codes", "enabled_error_codes"):
|
|
554
|
+
val = sorted([code.code for code in val])
|
|
555
|
+
result[opt] = val
|
|
556
|
+
return result
|